Articles of winforms

WinForms设计器属性的不同派生类型

假设我有一个特定的类型,我想让Windows窗体设计师使用… public class Style { public CustomBrush Brush { get; set; } } 而CustomBrush就像这样实现…… public abstract CustomBrush { … } public SolidCustomBrush : CustomBrush { … } public GradientCustomBrush : CustomBrush { … } 在设计时有没有办法可以从CustomBrush派生的任何类型中选择,实例化所选类型的实例,并通过设计器进行修改? 到目前为止,我能够做到这一点的唯一方法是使用enum enum BrushType { Solid, Gradient } 当enum改变时, Brush属性的底层类型也会改变,但我不喜欢这种方法……它很脏!

从另一个表单中显示表单

当我想通过单击另一个表单中的按钮来显示表单(C#)时,我通常会从我想要显示的表单创建一个对象并使用show方法: Form2 f2 = new Form2(); f2.Show(); 或者我与“所有者”合作: Form2 tempForm = new Form2(); this.AddOwnedForm(tempForm); tempForm.Show(); 这两种方式产生相同的结果,但最好的是什么,它们之间有什么区别?

HTMLAgilityPack加载AJAX内容以进行抓取

我试图在ac#webforms项目中使用HTMLAgilityPack抓取一个网页。 我见过的所有解决方案都使用WebBrowser控件。 但是,根据我的判断,这仅适用于WinForms项目。 目前我通过以下代码调用所需的页面: var getHtmlWeb = new HtmlWeb(); var document = getHtmlWeb.Load(inputUri); HtmlAgilityPack.HtmlNodeCollection nodes = document.DocumentNode.SelectNodes(“//div[@class=\”nav\”]”); 我见过使用WebBrowser控件的一段代码示例: if (this.webBrowser1.Document.GetElementsByTagName(“html”)[0] != null) _htmlAgilityPackDocument.LoadHtml(this.webBrowser1.Document.GetElementsByTagName(“html”)[0].OuterHtml); 关于如何在加载AJAX后抓取页面的任何建议/指示将不胜感激。

在Windows窗体中等效的canvas

我正在创建一个简单的应用程序,以显示多个图像一个接一个。 在WPF中,我使用了相当于图像数量的canvas数量,并将这些canvas添加到主canvas中。 在每个canvas中使用Image控件,我和我一起上传了图像,看起来很不错。 现在,我试图在Windows窗体中执行相同的操作。 我尝试使用Panel(作为WPF中的主canvas)并使用Panel_Paint事件在其上绘制图像。 没事。 但是我需要添加一些内容(因为我在WPF中添加了多个canvas),但是没有任何攻击。 我计划了几个小组,但他们都需要Panel_Paint来绘制图像。这是一些难以维护的……还有其他想法吗?

看到C#windows形成了来自F#的项目代码

我有一个C#Windows窗体项目,其中包含一些C#代码。 问题:我如何拥有一个F#文件,我可以编写F#代码,但仍然引用我在Form1.cs上的所有C#代码(包括GUI)。 我能成功地做到这一点: – 创建C#Windows窗体项目 – 创建一个F#Library项目 – 从我的C#项目引用F#Library DLL – 这样我可以从C#调用F#函数 但是我还是看不到来自F#的按钮和文本框 我理解那是因为它是一个库,它不能引用System.Windows.Forms 那么我该如何解决这个问题呢? 我不希望它是一个库或者这个或那个,我只是希望它是一个允许我编写F#代码的文件,同时能够引用我的C#表单和代码。 我想你可以说我想要一个F#文件,它也是一个“部分类Form1”,这样我就可以继续为同一个Project编写代码,但是使用F#代替。 我怎么做?

检查文本框中的输入是否是电子邮件

我正在尝试validationuserinput是否是电子邮件地址(向数据库添加成员)。 当调用validation事件时,用户将在TextBox中输入数据; 我想检查输入是否是有效的电子邮件地址。 因此在字符串中包含至少一个@和一个点(。)。 有没有办法通过代码,或者使用MaskedTextbox中的Mask来实现这一点?

如何将表单添加到控制台应用程序以便用户可以选择文件?

我已经创建了一个控制台应用程序,并按照我想要的方式工作。 使用VS2010中的“添加项目”>“添加Windows窗体”选项,它自动创建了我需要的内容。 我添加了一个按钮和代码来检索Excel文件(如下所示)我的问题是: 如何获取他们创建的文件并在program.cs“Main”区域中使用它? 来自Form1.cs的OpenFileDialog按钮单击事件的代码: private void btnSelect_Click(object sender, EventArgs e) { OFD.openFileDialog OFD = new OpenFileDialog(); OFD.Multiselect = false; OFD.Title = “Open Excel Document”; OFD.Filter = “Excel Document|*.xlsx;*.xls”; OFD.ShowDialog(); string docPath = OFD.FileName; } 我的静态主事件的那部分我希望从program.cs文件中创建“docPath” static void Main(string[] args) { var excel = new ExcelQueryFactory(); excel.FileName = @”C:\Users\Christopher\Desktop\BookData\TestResults.xls”; } 感谢您的时间。 这是我完成的解决方案: class Program { […]

C#WinForms AnimateWindow问题

我使用以下代码来动画窗口。 让我稍微解释一下我程序的视觉结构。 我有一个位于Form1顶部的FlowLayoutPanel,以及位于FlowLayoutPanel顶部的许多GroupBox对象。 最后,我有一个Button和一个位于GroupBox顶部的不可见的RichTextBox对象。 例如:Form1-> FlowLayoutPanel-> GroupBox-> Button和RichTextBox(不可见) 我想要实现的是,当我单击Button对象时,我希望我的RichTextBox向下滑动。 我通过在我的主窗体上创建一个按钮和一个RichTextBox来尝试它,它工作得非常好。 但是,当我在运行时使用GroupBox控件尝试相同的操作时,我的Animate函数会抛出一个未知的exception。 class Effects { public enum Effect { Roll, Slide, Center, Blend } public static void Animate(Control ctl, Effect effect, int msec, int angle) { int flags = effmap[(int)effect]; if (ctl.Visible) { flags |= 0x10000; angle += 180; } else { if (ctl.TopLevelControl == ctl) […]

C#中的嵌入式资源字体无法正常工作

我在我的资源中嵌入了一个.ttf字体文件(特别是“Amatic Bold”),我使用下面的代码来获取Font。 我试过这篇文章的代码: 如何在我的C#应用​​程序中嵌入字体? (使用Visual Studio 2005) 这是我的实现: static public Font GetCustomFont (byte[] fontData, float size, FontStyle style) { if (_fontCollection == null) _fontCollection = new PrivateFontCollection(); IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length); System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length); _fontCollection.AddMemoryFont(fontPtr, fontData.Length); System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr); return new Font(_fontCollection.Families[0], size, style); } 我这样使用它: Font font = GetCustomFont(Properties.MainResources.Amatic_Bold, 25, System.Drawing.FontStyle.Bold); 字体应如下所示: 问题是字体正在加载但在使用时没有正确显示; 它看起来像一个“Arial”或其他标准字体而不是它应该是什么。 如果我在Windows中安装该字体,它可以工作(我想很明显…) […]

ASP MVC和WinForm应用程序之间的通信

我正在寻找用户可以在ASP和Winform应用程序之间进行通信的方式。 我正在寻找像soluto.com这样的东西,我想让用户通过网站向其他计算机发送命令。 因此,假设用户注册了10台计算机,这些计算机已在mvc应用程序上注册。 用户可以选择所有10台计算机,并通过单击按钮发送“执行此任务”。 我想的是,Winform将创建一个httplisten服务器。 每次winform打开时,它都会向mvc发送一个“我在线”的post以及IP:端口。 服务器将在需要时向该ip:端口发送请求。 这种方法似乎非常不安全,有一个开放的端口,配置防火墙等,似乎是一种矫枉过正。 我想知道是否有任何其他方式来实现这一点。 感谢您的帮助。 PS在您宣称这是一个愚蠢的想法之前,Piriform也在做这样的事情。 看看Agomo.com