Questions tagged «winforms»

WinForms是Windows Forms的非正式名称,Windows Forms是Microsoft .NET Framework和Mono中的GUI类库。此标签中的问题还应使用目标框架([.net]或[mono])进行标签,并且通常应使用编程语言标签进行标签。


7
Visual Studio 2010突然看不到名称空间?
我的C#WinForms解决方案有两个项目。DLL是我正在处理的主要项目,而可执行文件WinForms则称为“ Sandbox”,这样我就可以轻松地一次编译/运行/调试DLL。 我正在两个项目的.Net 4.0中工作。 一切工作正常,直到我添加了一些看似纯真的代码,并在DLL中引用了System.Web。现在,我的沙盒项目看不到DLL项目的名称空间。我没有更改任何我认为应该会影响到此的内容。 如果我从沙盒引用中删除对DLL的项目引用,然后重新添加,则红色下划线全部消失,所有类的颜色编码都返回;等等。但是,一旦我尝试构建解决方案,整个事情就会再次崩溃。 右键单击沙箱引用中的DLL项目并在对象浏览器中查看时,我可以看到名称空间及其中的所有内容。 我感觉这可能是某种错误? 这是某种VS2010错误吗?几个月前,我遇到了同样的问题,当时只能通过制作一个新项目并重新导入文件来修复它。但是,这一次,我拥有数十亿个文件,只有在万不得已时才这样做! 编辑:恐慌地浏览并撤消了所有更改之后,试图查找引起问题的原因,似乎是这一行: string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address); 如果我注释掉这一行,则不会出现名称空间错误,并且项目会正常运行。我看不到这行有什么毛病。

2
任务并行库替换BackgroundWorker?
任务并行库中是否有任何东西被认为是对BackgroundWorker类的替代或改进? 我有一个带有向导式UI的WinForms应用程序,它执行一些长期运行的任务。我希望能够拥有一个带有标准进度条的响应式UI,并能够取消该操作。我之前使用BackgroundWorker做到了这一点,但是我想知道是否可以使用某些TPL模式来代替?

5
如何加快将项目添加到ListView的速度?
我要在WinForms ListView中添加几千个(例如53,709个)项目。 尝试1:13,870 ms foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } 这非常糟糕。最明显的第一个解决方法是致电BeginUpdate/EndUpdate。 尝试2:3,106 ms listView.BeginUpdate(); foreach (Object o in list) { ListViewItem item = new ListViewItem(); RefreshListViewItem(item, o); listView.Items.Add(item); } listView.EndUpdate(); 这样比较好,但是仍然慢了一个数量级。让我们将创建ListViewItems与添加ListViewItems分开,以便找到真正的罪魁祸首: 尝试3:2,631 ms var items = new List<ListViewItem>(); foreach (Object o …



18
如何每天在特定时间在C#中调用方法?
我已经搜索了SO,找到了有关Quartz.net的答案。但这对于我的项目来说似乎太大了。我想要一个等效的解决方案,但要更简单(最好是在代码中)(不需要外部库)。如何每天在特定时间调用方法? 我需要添加一些有关此的信息: 最简单(最丑陋)的方法是每秒钟/分钟检查一次时间,并在正确的时间调用该方法 我想要一种更有效的方法来执行此操作,而无需经常检查时间,并且可以控制该作业是否完成。如果该方法失败(由于任何问题),则程序应知道要写入日志/发送电子邮件。这就是为什么我需要调用方法而不是安排工作的原因。 我发现此解决方案在Java中固定时间在Java中调用方法。C#中有类似的方法吗? 编辑:我已经做到了。我在void Main()中添加了一个参数,并创建了一个蝙蝠(由Windows Task Scheduler计划)以使用此参数运行程序。程序运行,执行工作,然后退出。如果作业失败,则可以写日志和发送电子邮件。这种方法很符合我的要求:)

10
DataGridView自动调整和填充
我的专栏中有3列DataGridView。我想做的是让前2列自动适合内容的宽度,并让第3列填充剩余的空间。 是否可以在WinForms中进行?如果可以的话,我正在从EF DataContext加载数据。我提供了一张有关当前外观的图片。



3
表单不响应KeyDown事件
我在Windows Forms项目上工作了一段时间,因此决定尝试键盘快捷键。经过一番阅读之后,我发现我只需要编写一个事件处理程序并将其绑定到表单的KeyDown事件即可: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.Alt && e.KeyCode == Keys.O) { MessageBox.Show("Ctrl+Alt+O: magic!"); } } 我这样做是一种很好的方法,即打开Visual Studio设计器的“属性”面板,然后双击表单的KeyDown事件以生成Form1_KeyDown事件处理程序。但是在测试我的应用程序时,该表单完全不响应Ctrl+ Alt+O键盘快捷键。但是,Visual Studio设计器确实生成了将事件处理程序绑定到表单的代码: private void InitializeComponent() { // ... this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); // ... } 因此,我尝试向Console.WriteLine()处理程序添加一个调用,以检查该调用是否已被调用,但也没有运气。 另外,我尝试在事件绑定调用上设置一个断点(如上图所示),发现程序可以很好地达到该断点。但是,我无法在方法定义本身中设置的任何断点都不会到达。 为了确保我正确地执行了前几个步骤,我尝试使用以下命令重复执行这些步骤: 相同解决方案中的新表格。 相同的问题:当我按我的Ctrl+ Alt+O键盘快捷键并且调试器甚至没有进入事件处理程序时,表单都没有响应。 再试一次,它可以工作。 全新的WinForms解决方案。 它工作正常:出现消息对话框(Console.WriteLine()呼叫也可以)。 所以我在这里很迷路。是什么阻止了这个项目中的所有表单接收KeyDown事件?
82 c#  .net  winforms 

15
如何在WebBrowser控件中注入Javascript?
我已经试过了: string newScript = textBox1.Text; HtmlElement head = browserCtrl.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = browserCtrl.Document.CreateElement("script"); lblStatus.Text = scriptEl.GetType().ToString(); scriptEl.SetAttribute("type", "text/javascript"); head.AppendChild(scriptEl); scriptEl.InnerHtml = "function sayHello() { alert('hello') }"; scriptEl.InnerHtml和scriptEl.InnerText都给出错误: System.NotSupportedException: Property is not supported on this type of HtmlElement. at System.Windows.Forms.HtmlElement.set_InnerHtml(String value) at SForceApp.Form1.button1_Click(Object sender, EventArgs e) in d:\jsight\installs\SForceApp\SForceApp\Form1.cs:line 31 at System.Windows.Forms.Control.OnClick(EventArgs …


9
在两个屏幕之一上,DataGridView的可怕的重绘性能
我实际上已经解决了这个问题,但我将其发布以供后代参考。 我的双显示器系统上的DataGridView遇到了一个非常奇怪的问题。该问题表现为控件的极慢重绘(例如,完整重绘需要30秒),但仅当它在我的一个屏幕上时才显示。另一方面,重绘速度很好。 我有Nvidia 8800 GT,带有最新的非beta驱动程序(175。)。是驱动程序错误吗?我将把它悬而未决,因为我必须忍受这种特殊的配置。(不过,这在ATI卡上不会发生...) 绘制速度与单元格内容无关,并且自定义绘制根本无法提高性能-即使仅绘制实心矩形也是如此。 后来我发现,将ElementHost(来自System.Windows.Forms.Integration命名空间)放在窗体上可以解决此问题。它不一定要弄乱;它只是需要DataGridView形式的子对象。只要Visible属性为true ,就可以将其调整为(0,0)。 我不想将.NET 3 / 3.5依赖项显式添加到我的应用程序中。我创建了一种在运行时使用反射创建此控件的方法。它可以正常工作,并且至少在没有所需库的计算机上正常运行-只是恢复缓慢。 此方法还使我可以在应用程序运行时申请修复,从而可以更轻松地查看表单上WPF库的更改(使用Spy ++)。 经过大量的试验和错误之后,我注意到在控件本身(而不是仅表单)上启用双重缓冲可以解决此问题! 因此,您只需要基于DataGridView创建自定义类,即可启用其DoubleBuffering。而已! class CustomDataGridView: DataGridView { public CustomDataGridView() { DoubleBuffered = true; } } 只要我所有的网格实例都使用此自定义版本,一切都很好。如果遇到这种情况导致我无法使用子类解决方案(如果我没有代码),我想我可以尝试将该控件注入表格中:)(尽管我更有可能尝试使用反射从外部强制启用DoubleBuffered属性,以再次避免该依赖关系。 可惜如此琐碎的事情占用了我很多时间...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.