Tag: winforms

如何加速项目添加到ListView?

我将几千(例如53,709)项目添加到WinForms ListView。 尝试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(); 这样比较好,但是还有一个数量级太慢了。 让我们分开创buildListViewItems和添加ListViewItems,所以我们find了真正的罪魁祸首: 尝试3 : 2,631 ms var items = new […]

如何滚动RichTextBox到底部?

我需要能够滚动RichTextBox的底部,即使我不附加文字。 我知道我可以附加文本,然后用它来设置select开始。 不过,我想确保它是在视觉上的底部,所以我不添加任何文字。

Windows窗体 – input按键激活提交button?

我怎样才能捕捉到我的窗体上的任何地方input按键,并强制它触发提交button事件?

如何将命令行parameter passing给WinForms应用程序?

我有两个不同的WinForms应用程序,AppA和AppB。 两者都运行.NET 2.0。 在AppA中,我想打开AppB,但是我需要将命令行parameter passing给它。 我如何使用在命令行中传递的参数? 这是我目前在AppB中的主要方法,但我不认为你可以改变这个? static void main() { }

如何在运行时将文本框的文本设置为粗体?

我使用的Windows窗体,我有一个文本框,我偶尔会喜欢使文本粗体,如果它是一个特定的值。 如何在运行时更改字体特征? 我看到有一个名为textbox1.Font.Bold的属性,但这是一个Get only属性。

在Windows窗体上绘制一个像素

我被困在试图打开Windows窗体上的一个像素。 graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels API真的应该有一个方法来设置一个像素的颜色,但我没有看到一个。 我正在使用C#。

弱的参考收益

有人可以解释在C#中不同types的引用的主要好处吗? 弱引用 软参考 幻影参考 强烈的参考。 我们有一个消耗大量内存的应用程序,我们正试图确定这是否是一个需要关注的领域。

Windows窗体中是否有内置确认对话框?

我想创build一个简单的确认对话框,说“请检查信息,如果您确定它是正确的,请单击确定。 有像这样内置的东西吗?

在我的两个屏幕之一的DataGridView可怕的重绘性能

我已经解决了这个问题,但是我把它贴出来留给后人。 我遇到了双监视器系统上DataGridView的一个非常奇怪的问题。 这个问题performance为一个极其缓慢的控制重绘( 像完整重绘30秒 ),但只有当它在我的屏幕之一。 另一方面,重绘速度很好。 我有一个nVidia 8800 GT与最新的非testing版驱动程序(175.东西)。 这是一个驱动程序错误? 我会把它留在空中,因为我必须忍受这个特殊的configuration。 (尽pipe…不会发生在ATI卡上) 油漆速度与单元格内容无关,而且自定义绘图根本无法改善性能 – 即使只是绘制一个坚实的矩形。 后来我发现在表单上放置一个ElementHost(来自System.Windows.Forms.Integration命名空间)可以解决问题。 它不必被搞砸,它只需要是DataGridView所在窗体的子项。 只要Visible属性为true,就可以将其调整为(0,0)。 不想明确地将.Net 3 / 3.5依赖项添加到我的应用程序中,我创build了一个方法来在运行时(如果可以的话)使用reflection来创build此控件。 它起作用了,至less它在没有所需库的机器上优雅地失败 – 它只是变得很慢。 这个方法也可以让我在应用程序运行的时候进行修复,使得更容易看到WPF库在我的表单上改变了什么(使用Spy ++)。 经过大量的反复试验之后,我注意到在控件本身(而不是表单)上启用双缓冲可以纠正问题! 所以,您只需要基于DataGridView创build一个自定义类,以便启用它的DoubleBuffering。 而已! class CustomDataGridView: DataGridView { public CustomDataGridView() { DoubleBuffered = true; } } 只要我所有的网格实例都使用这个定制版本,一切都很好。 如果我遇到由于无法使用子类解决scheme(如果我没有代码)而导致的情况,我想我可以尝试将该控件注入到表单中:) 会更有可能尝试使用reflection从外部强制DoubleBuffered属性,以再次避免依赖 )。 很遗憾,这么一个简单的东西吃了这么多的时间…

Winforms TableLayoutPanel以编程方式添加行

我一直在争取一段时间,并发现许多其他人也与TableLayoutPanel(.net 2.0 Winforms)的斗争。 问题 我试图采取一个'空白'tablelayoutpanel,其中有10列定义,然后在运行时编程添加控制行(即每个单元格一个控件)。 有人可能会认为它应该是如此简单 myTableLayoutPanel.Controls.Add(myControl, 0 /* Column Index */, 0 /* Row index */); 但是(对我来说)不会添加行。 所以也许可以添加一行样式 myTableLayoutPanel.RowStyles.Clear(); myTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F)); 但是这也行不通。 我挖了myTableLayoutPanel.RowCount ,发现myTableLayoutPanel.RowCount用法从devise时间改变到运行时间,因此做myTableLayoutPanel.RowCount++; 实际上并没有添加其他行,甚至在为它添加RowStyle条目之前/之后! 我遇到的另一个相关的问题是控件将被添加到显示,但他们都只是简单地在TableLayoutPanel的0,0点呈现,另外他们甚至没有被限制在它们应该是Cell的边界内显示在内(即与Dock = DockStyle.Fill他们仍然显得太大/小)。 有人有一个在运行时添加行和控件的工作示例?