在WebBrowser控件中查看Docx文档

我已经尝试了几天,将一个单词docx文件加载到一个存在于windows窗体c#中的webbrowser控件中。 经过几天的努力才能完成这项工作,但在谷歌的帮助下以及一些有用的post我已经成功完成了它并且它是完美的。 我通过以下方式完成了: 将docx文件转换为临时html文件。 我将我的webbrowser控件导航到该临时html文档。 只有我注意到一个问题:webbrowser控件似乎在Web Layout中查看文件。 这就是Ms-Word Web Layout,您知道在Ms-Word,读取模式,打印布局和Web布局中有3种主要的查看布局。 问题在于,一些格式错误的docx文件在该webbrowser控件中全部出现偏差,因为它会将它们拉伸出来,好像它们会出现在实际的Web浏览器应用程序中一样。 现在我想要实现的是能够以与Ms-Word中的Print Layout类似的方式查看该webbrowser控件的内容,或者至少是控件在控件自己的大小内重新调整内容。 (如果我的代码是必要的,那么我可以提供它)

如何合并两个不同对象的列表?

使用C#和LINQ,如何合并两个不同对象的列表,比如研讨会和会议? 它们有一些共同的和一些不同的字段/属性,并且不共享唯一的id。 class Seminar { int id, DateTime joinDate, string name } class Conference { Guid confNumber, DateTime joinDate Type type } 我有一个列表: List List 我需要将它们合并到一个超级List : List 代码片段会很有帮助。

Mandelbrot算法 – 背景颜色

我正在用C#编写一个Mandelbrot应用程序(我正在使用Python进行测试)。 我已经拥有从集合到其边界的连续着色。 我目前的问题是设置环境的背景颜色。 我现在获取颜色的代码现在看起来像是这样,它将颜色变为双倍(对数函数在之前完成)并检查它的部分与否,并创建一个非常平滑的渐变(从黑色到橙色)。 private Color getColor(double i) { double ratio = i / (double)(iterations); int col = (int)(i / iterations * 255); int alpha = 255; if (ratio >= 0 && ratio = 0.25 && ratio = 0.50 && ratio = 0.75 && ratio < 1) return Color.FromArgb(alpha, col, col/2, 0); return Color.Black; //color […]

是否可以在TextBox中将DataTable作为AutoCompleteSource? (C#)

是否可以在TextBox中将DataTable作为AutoCompleteSource? (C#)

XmlElement的Xml签名无法validation

我提前为相当冗长的代码块道歉,但这是我可以生成的最小的可编译示例。 我已经省略了原始代码中的所有错误检查。 我正在使用Visual Studio 2012和.NET 4.5,虽然这对4.5来说并不新鲜,但它应该适用于任何版本。 我正在尝试签署XML文档的元素以防止它们被篡改。 我不想保护整个文档,但只保留某些元素。 也许甚至不同的元素与不同的键。 但是,当我签署三个示例元素并尝试validation它们时,第一个元素总是validation,另外两个元素失败。 更糟糕的是,如果我在签名后修改它,第一个甚至会成功。 我已经google了很多,阅读了很多教程,甚至在这里问了一个理论问题 ,但我不知道我做错了什么。 谁能发现我的错误? 注意:我很乐意为解决这个问题的人提供星期五问题的同样赏金。 证书是通过执行: “C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin \ makecert”-r -pe -n“CN = XMLDSIG_Test”-b 01/01/2013 -e 01/01/2014 -sky签约 – 我的 Test xml文件是: 签名和validation的代码: namespace SOExample { using System; using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.Xml; using System.Xml; public static […]

如何在TFS中反序列化和序列化构建过程参数

我正在尝试使用TFS 2013 API创建新的构建定义。 我必须引用的流程模板包含几个自定义活动和参数。 在创建构建定义时,需要动态更新某些属性值。 所以我尝试使用下面的代码反序列化过程参数: IDictionary processParams = WorkflowHelpers.DeserializeProcessParameters(defaultTemplate.Parameters); 此代码总是抛出以下exception: An unhandled exception of type ‘System.Xaml.XamlObjectWriterException’ occurred in System.Xaml.dll Additional information: No matching constructor found on type ‘System.Activities.Activity’. You can use the Arguments or FactoryMethod directives to construct this type. 这真是令人沮丧,我无法摆脱这个错误。 我还尝试使用以下代码反序列化过程参数: using (StringReader stringReader = new StringReader(parameterValues)) { object obj = XamlServices.Load( ActivityXamlServices.CreateReader( […]

如何将JSON对象读取到WebAPI

我已经检查了一些类似的问题,但没有一个答案似乎适合(或者对我来说足够愚蠢)。 所以,我有一个非常简单的WebAPI来检查数据库中是否存在带有电子邮件的用户。 AJAX: var param = { “email”: “ex.ample@email.com” }; $.ajax({ url: “/api/User/”, type: “GET”, data: JSON.stringify(param), contentType: “application/json; charset=utf-8”, dataType: “json”, success: function (data) { if (data == true) { // notify user that email exists } else { // not taken } } }); 的WebAPI: public bool Get(UserResponse id) { string email = […]

使用字符串常量更改通知属性

我正在使用一些现有代码,并试图找出在实现INotifyPropertyChanged接口时使用字符串常量作为属性名称的优势(如果有的话)。 例如,这样做: /* * Why use this instead of string literal * in OnPropertyChanged below?? */ public const string CustomerIdPropertyName = “CustomerId”; private int _customerId; public int CustomerId { get { return _customerId; } set { if (_cusomterId != value) { _customerId = value; OnPropertyChanged(CustomerIdPropertyName); } } } 而不是这个: private int _customerId; public int CustomerId […]

COM方法,Char类型和CharSet

这是我之前的问题的后续问题: .NET互操作是来回复制数组数据,还是固定数组? 我的方法是COM接口方法(而不是DllImport方法)。 C#签名如下所示: void Next(ref int pcch, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char [] pchText); MSDN 说 : 当默认情况下具有Unicode格式的托管Char类型传递给非托管代码时,interop编组器会将字符集转换为ANSI。 您可以将DllImportAttribute属性应用于平台调用声明,将StructLayoutAttribute属性应用于COM互操作声明,以控制封送的Char类型使用的字符集。 另外,@ HansPassant在他的回答中说 : char []不能作为LPWStr封送,它必须是LPArray。 现在CharSet属性起作用,因为你没有指定它,char []将被编组为8位char [],而不是16位wchar_t []。 编组的数组元素大小不同(它不是“blittable”),因此编组器必须复制数组。 非常不受欢迎,特别是考虑到您的C ++代码需要wchar_t。 在这个特定情况下,一个非常简单的方法是在数组中没有得到任何回报。 如果通过复制对数组进行封送处理,则必须明确告诉编组程序在调用后需要将数组复制回来。 您必须在参数上应用[In,Out]属性。 你会得到中国人。 我找不到CharSet的模拟(通常与DllImportAttribute和StructLayoutAttribute ),它可以应用于COM接口方法。 尽管如此,我的输出并没有“中国人”。 一切似乎工作正常,我从COM得到正确的Unicode字符。 这是否意味着Char总是被解释为COM方法互操作的WCHAR ? 我找不到任何确认或否认这一点的文件。

如何使用C#从PKCS#12(.p12)文件获取私钥

我试图使用PKCS#12证书签署一些数据,但是我从PKCS#12(.p12)文件获取私钥时遇到问题。 public byte[] sign(string text) { string password = “1111”; X509Certificate2 cert = new X509Certificate2(“c:\\certificate.p12”,password); byte[] certData = cert.Export(X509ContentType.Pfx,password); X509Certificate2 newCert = new X509Certificate2(certData, password); RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)newCert.PrivateKey; SHA1Managed sha1 = new SHA1Managed(); UnicodeEncoding encoding = new UnicodeEncoding(); byte[] data = encoding.GetBytes(text); byte[] hash = sha1.ComputeHash(data); return crypt.SignHash(hash, CryptoConfig.MapNameToOID(“SHA1”)); } 问题是newCert.PrivateKey为null但如果我使用.pfx certicitae以类似的方式工作。 public byte[] […]