.Net TableLayoutPanel – Clearing Controls is Very Slow 相关文章

原文信息:.Net TableLayoutPanel – Clearing Controls is Very Slow

This is really simple. I have a TableLayoutPanel that is populated with controls (just Labels, Buttons, and some Panels with buttons) based on a database query. When the data needs to be refreshed, I use TableLayoutPanel.Controls.Clear(). Unfortunately, this is a very slow operation. I would expect it to be faster than the code populating the table, but it is at least 3 or 4 times slower. I definitively proved that the slowness is when executing Controls.Clear() by executing this as the single thing done to the TableLayoutPanel after a message box is displayed (then the procedure returns). The


TableLayoutPanel responds very slowly to events
In my application I really needed to place a lot of controls (label, textbox, domainupdown) in a nice order. So I went ahead and used some nested TableLayoutPanel. The problem now is, this form responds very slow to most of events (resize, maximize, minimize and ...) it takes really up to 5 seconds for controls within the tables to get resized, redrawed to the new size of form. I am putting a finger in my eye now! If this form is that slow on my home PC (i7@4GHz and a good graphic card) what it will do tommorow on the old P4 computer at work? I even tried to use the code below but it does

2021-04-04 21:58:25    分类:问答    c#   winforms   performance   tablelayoutpanel

Winforms TableLayoutPanel以编程方式添加行(Winforms TableLayoutPanel adding rows programmatically)
问题 我已经为此进行了一段时间的战斗,并且发现许多其他人也为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++; 实际上并没有添加另一行,甚至没有为它添加RowStyle条目之前/之后! 我遇到的另一个相关问题是控件将被添加到显示中,但是它们都只是在TableLayoutPanel的0,0点处呈现,此外

2021-04-21 02:33:25    分类:技术分享    c#   .net   winforms   runtime   tablelayoutpanel

在TableLayoutPanel中动态添加行(Add Row Dynamically in TableLayoutPanel)
问题 我想在c#的Windows窗体的TableLayoutPanel中逐行动态添加这些条目 我怎样才能做到这一点? 回答1 试试下面的代码, // TableLayoutPanel Initialization TableLayoutPanel panel = new TableLayoutPanel(); panel.ColumnCount = 3; panel.RowCount = 1; panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F)); panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F)); panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F)); panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F)); panel.Controls.Add(new Label() { Text = "Address" }, 1, 0); panel.Controls.Add(new Label() { Text = "Contact No" }, 2, 0); panel.Controls.Add(new

2021-04-30 17:08:06    分类:技术分享    c#   .net   tablelayoutpanel

Need a very customized large Winforms grid
I am about to develop a Windows PC application (it can be WinForms or WPF) and my main concern is a UI problem I will have to address. Basically, I need to have a grid of about 50x50 that I need to get input from the user for. That's 2500 fields. Realistically most will be left blank, about 10% will be filled out by a user. Each field can be blank or have a number from 1 to 4. I want easy input - a drop down box perhaps (since it doesn't make sense to tab through all 2500 fields when with the keyboard, I want the user to fill out the values with the mouse). I was thinking the drop down boxes

2021-04-21 02:48:03    分类:问答    c#   wpf   winforms   user-interface   datagridview

如何在Winforms设计器中访问继承的控件(How to access inherited controls in the winforms designer)
问题 我正在制作一些控件,这些控件必须具有相同的外观和一些共同的行为,尽管它们是为不同种类的输入而设计的。 因此,我做了一个继承自UserControl的BaseClass,而我所有的控件都继承自BaseClass。 但是,如果我在设计器中添加了针对BaseClass的控件(如TableLayoutPanel),则在设计继承的类时将无法访问它们。 我看到了TableLayoutPanel,但是即使他是“受保护的”,我也无法通过设计器修改它或将控件放入其中。 我可以通过代码轻松访问它,但是我不想失去使用设计器的能力。 现在,我只是从BaseClass中删除了所有控件,在每个继承的类中添加了布局和所有公共控件,然后使用引用在BaseClass中对其进行操作。 但这一点都不令我满意。 有没有一种方法可以使设计器与继承的受保护成员控件一起使用? 环境:C#、. NET 3.5,Visual Studio 2008 编辑以回答SLaks的建议。 我尝试设置一个属性,尽管我不习惯使用它们,但它似乎不起作用。 这是我尝试的代码: public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } public TableLayoutPanel

2021-04-19 16:39:54    分类:技术分享    c#   winforms   visual-studio-2008

TableLayoutPanel显示垂直滚动(TableLayoutPanel displays vertical scroll)
问题 我有TableLayoutPanel用于使用AutoScroll = true动态创建控件。 当我添加新控件时,它工作正常。 但是,当我删除并且所有控件都可见时,垂直滚动是可见的。 一些截图在这里: 预期/正确的滚动可见性: 可见性不正确: 有任何想法吗? 更新:这是一些代码 tableLayoutPanel1.SuspendLayout(); tableLayoutPanel1.RowCount = 0; tableLayoutPanel1.RowStyles.Clear(); tableLayoutPanel1.AutoScroll = true; tableLayoutPanel1.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0); foreach (var item in objects) { tableLayoutPanel1.RowCount++; tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize)); tableLayoutPanel1.Controls.Add(CreateNewItem(item)); } tableLayoutPanel1.RowCount++

2021-04-26 14:23:38    分类:技术分享    c#   scrollbar   tablelayoutpanel   vertical-scrolling   vertical-scroll

TableLayoutPanel displays vertical scroll
I have TableLayoutPanel for dynamic creation of controls with AutoScroll = true. It's work fine when I add new controls. But when I remove and all controls are visible, vertical scroll is visible. Some screenshots here: Expected/correct scroll visibility: Incorrect visibility: Any ideas? Update: Here is some code tableLayoutPanel1.SuspendLayout(); tableLayoutPanel1.RowCount = 0; tableLayoutPanel1.RowStyles.Clear(); tableLayoutPanel1.AutoScroll = true; tableLayoutPanel1.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0); foreach (var item in objects) { tableLayoutPanel1

2021-04-06 05:53:06    分类:问答    c#   scrollbar   tablelayoutpanel   vertical-scrolling   vertical-scroll

Remove Row inside TableLayoutPanel makes a layout problem
I have a WinForms application that has a TableLayoutPanel; this is the definition code: tableLayoutPanel1 = new TableLayoutPanel(); tableLayoutPanel1.Dock = DockStyle.Fill; tableLayoutPanel1.AutoScroll = true; tableLayoutPanel1.RowCount = users.Count + 1; tableLayoutPanel1.ColumnCount = 1; tableLayoutPanel1.GrowStyle = TableLayoutPanelGrowStyle.FixedSize; tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); foreach (String user in users) { tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 600F)); } tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType

2021-04-05 07:39:36    分类:问答    c#   winforms   user-controls   tablelayoutpanel

How to access inherited controls in the winforms designer
I'm making some controls which all have to share the same look and some common behavior, although they are meant for different kind of inputs. So I made a BaseClass which inherit from UserControl, and all my controls inherit from BaseClass. However, if i add controls for BaseClass in the designer, such as a TableLayoutPanel, i can't access them when I'm designing the inherited classes. I see the TableLayoutPanel, but even though he is "protected", i can't modify it or put controls in it through the designer. I've no trouble accesing it by code, but i don't want to lose the ability to use the

2021-04-16 20:17:17    分类:问答    c#   winforms   visual-studio-2008

如何在WinForms中禁用表格面板的水平滚动条(How to disable horizontal scrollbar for table panel in winforms)
问题 嗨,我有一个tablelayoutpanel,我正在动态地将控件绑定到它。 当项目数超过面板高度时,显然会出现垂直滚动条,这没有问题。 但是同时,即使项目的宽度小于面板的宽度,也会出现水平滚动条。 我该如何预防呢? 回答1 int vertScrollWidth = SystemInformation.VerticalScrollBarWidth; tableLayoutPanel1.Padding = new Padding(0, 0, vertScrollWidth, 0); 回答2 停靠的TableLayoutPanel包含停靠的GroupBoxes和设置为100%宽度的单个Column时,我遇到了这个问题。 我不想为这些设置手动大小-我希望它们随表格一起调整大小。 奇怪的是,将TableLayoutPanel的Right Padding设置为1(而不是滚动条的宽度-如您所料,会留下滚动条大小的间隙)完全解决了该问题。 这是在C#2010 Express,.NET 4,Windows 8中。不知道此合并是否可以在其他变体上使用。 将padding设置为0似乎可以解决IDE中的问题,但是在实际运行时问题仍然存在。 给我闻起来像是TableLayoutPanel中的某种错误……或者也许这只是我拥有的控件和属性的特定组合(这是一个非常复杂的布局)。 回答3

2021-04-30 12:33:21    分类:技术分享    c#   winforms   scrollbar   tablelayout

如何在C#中动态调整文本框的大小(How to dynamically resize a textbox in C#)
问题 我是C#用户界面的新手。 我已经创建了一个窗口,如第一个图像所示。 但是,如果用户拖动窗口并使它变大,我希望它使每个richTextBox随它展开,如第二richTextBox图所示。 例如,使richTextBox4与窗口大小成正比。 任何想法将不胜感激 图片1: 图片2: 回答1 您可以将TableLayoutPanel添加到您的窗体。 默认情况下,此面板有两列和两行。 然后,向每个单元格添加一个TextBox并将每个TextBox的Dock -Property设置为Fill 。 最后一步要做的要么设置Dock ,物业你的TableLayoutPanel来Fill或设置Anchor你的,物业TableLayoutPanel ,以Left | Right | Bottom | Top Left | Right | Bottom | Top Left | Right | Bottom | Top 。 然后,您的面板将与表单一起调整大小。 所有这些步骤都可以由设计人员完成。 回答2 利用TableLayoutControl 。 您可以在该表的每个单元格中拥有一个控件。 现在,在该表上,您可以设置: Dock: Fill Column Width: Percentage or absolute value as per needs Row Height: Percentage

2021-05-25 00:02:54    分类:技术分享    c#   winforms

在运行时动态地将控件添加到TableLayoutPanel(Adding controls to TableLayoutPanel dynamically during runtime)
问题 我有一个从两列零行开始的TableLayoutPanel。 我需要做的是,动态添加一行,并用不同的控件填充这两个列(将是面板)。 在Form1中,我以这种方式创建TableLayout: TableLayoutPanel Table = new TableLayoutPanel(); Table.Location = new Point(10, 40); Table.Size = new Size(620,100); Table.AutoSize = true; Table.Name = "Desk"; Table.ColumnCount = 2; Table.RowCount = 0; Table.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; Table.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.AddRows; this.Controls.Add(Table); 之后,在运行时,我需要多少行,以及是否用面板或某些标签填充它们。 可能在同一行中的左侧是“面板”,右侧是“标签”等。 回答1 使用这样的东西: Table.Controls.Add(new Label { Text = "Type:", Anchor =

2021-04-24 04:08:54    分类:技术分享    c#   .net   winforms   tablelayoutpanel

Adding controls to TableLayoutPanel dynamically during runtime
I have a TableLayoutPanel starting with two columns and 0 rows. What I need to do is, dynamically adding a row and filling both of the columns with different controls (it will be panels). In Form1 I am creating the TableLayout this way: TableLayoutPanel Table = new TableLayoutPanel(); Table.Location = new Point(10, 40); Table.Size = new Size(620,100); Table.AutoSize = true; Table.Name = "Desk"; Table.ColumnCount = 2; Table.RowCount = 0; Table.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; Table.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.AddRows; this.Controls

2021-04-15 09:29:31    分类:问答    c#   .net   winforms   tablelayoutpanel

How to prevent controls visually lagging behind on resize inside TableLayoutPanel?
I have a layout of medium complexity based on several nested TableLayoutPanels. Resizing the form causes the controls inside the deeper nested tables to visually lag behind the resize. Firstly, this makes them look like they move around while the form is being resized, but worse, the edges of the controls are visibly clipped when they lag enough to leave their allocated table cells. Is there any way to prevent this or is this the best TableLayoutPanel can do? Edit: Having experimented with a bunch of programs I came to the conclusion that lag on resize is a ubiquitous problem. To me, it seems

2021-05-12 20:18:56    分类:问答    .net   winforms   resize   tablelayoutpanel

如何防止控件在 TableLayoutPanel 内调整大小时视觉上滞后?(How to prevent controls visually lagging behind on resize inside TableLayoutPanel?)
问题 我有一个基于几个嵌套TableLayoutPanel的中等复杂度的布局。 调整表单大小会导致更深层嵌套表格内的控件在视觉上滞后于调整大小。 首先,这使它们看起来像是在调整窗体大小时四处移动,但更糟糕的是,当它们滞后到足以离开分配的表格单元格时,控件的边缘明显被剪裁。 有什么办法可以防止这种情况发生,或者这是TableLayoutPanel可以做的最好的事情吗? 编辑:尝试了一堆程序后,我得出的结论是调整大小滞后是一个普遍存在的问题。 对我来说,似乎每个人都已经辞职了,这是不可避免的,也是可以接受的。 当然,如果它实际上是不可避免的,那么接受它就会容易得多:) 查看您最喜欢的“良好 UI”程序中滞后的最简单方法:通过按住左边界调整它的大小并观察所有右对齐的控件跳来跳去(或者,顶部边界和底部对齐的控件,如状态栏)。 周围都坏了。 如果有人能提供很好的理由说明为什么在使用本机 Windows 控件时这是不可避免的,我会接受这个答案。 另外,如果您发现使用本机控件的程序不受此影响,请说出来,这可能会有所帮助... 回答1 Windows 中本机控件的问题在于每个控件都负责绘制自己,这意味着将位图绘制到屏幕上。 由于容器控件中的每个控件都被调整大小,它所占据的窗口区域变得无效,因此不仅容器中的每个控件都重新绘制,容器本身也必须重新绘制。 此外,调整大小/重绘事件都发生在 UI 线程上

2021-06-04 22:11:20    分类:技术分享    .net   winforms   resize   tablelayoutpanel

Cannot remove spacing between controls in TableLayoutPanel?
There's some spacing between the Buttons I add to my TableLayoutPanel. I removed the border in the Button and set the Margin and Padding to 0 in the Panel. But I continue getting that spacing. tableLayoutPanel.RowCount is set to 8 and the Rows collection I've added 8 rows with Size Type Absolute. Am I missing something? Here's the code: private void FillSelectLayout() { tableLayoutPanelSelect.Controls.Clear(); tableLayoutPanelSelect.RowStyles.Clear(); tableLayoutPanelSelect.RowCount = 8; for (int i = 0; i < 8; i++) { Button buttonSelector = new Button(); buttonSelector.Height = 64

2021-05-11 18:50:15    分类:问答    c#   winforms   visual-studio-2010   .net-4.0   tablelayoutpanel

查找添加到TableLayoutPanel的控件的行索引(Find row index of control added to TableLayoutPanel)
问题 将控件添加到Windows窗体的TableLayoutPanel中时,我需要采取措施。 我正在处理控件的ParentChanged事件,以了解是否将控件添加到父级(此处为TableLayoutPanel),但是我收到的索引是-1。 TableLayoutPanel t; private void button1_Click(object sender, EventArgs e) { // this.Text = tableLayoutPanel1.Height.ToString(); t = new TableLayoutPanel(); t.Dock = DockStyle.Fill; //t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; t.AutoSize = true; //t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; t.RowStyles.Add(new RowStyle(SizeType.AutoSize)); t.RowStyles.Add(new RowStyle(SizeType.AutoSize)); t.ColumnStyles.Add(new ColumnStyle(SizeType

2021-05-17 17:09:31    分类:技术分享    c#   .net   winforms   controls   tablelayoutpanel

在WinForms应用程序中查找集中控件的首选方法是什么?(What is the preferred way to find focused control in WinForms app?)
问题 在WinForms中查找当前正在接收用户(键盘)输入的控件的首选/最简单方法是什么? 到目前为止,我已经提出了以下建议: public static Control FindFocusedControl(Control control) { var container = control as ContainerControl; return (null != container ? FindFocusedControl(container.ActiveControl) : control); } 从表单中,可以简单地称为(在.NET 3.5及更高版本中,甚至可以将其定义为表单上的扩展方法)- var focused = FindFocusedControl(this); 这样合适吗 有没有我应该使用的内置方法? 请注意,使用层次结构时,仅对ActiveControl的单个调用是不够的。 想象: Form TableLayoutPanel FlowLayoutPanel TextBox (focused) (formInstance).ActiveControl将返回对TableLayoutPanel的引用,而不是TextBox的引用(因为ActiveControl似乎只返回控件树中的直接活动子级,而我正在寻找叶子控件)。 回答1 如果您已经对Windows

2021-03-30 21:16:44    分类:技术分享    .net   winforms

如何使FlowLayoutPanel.AutoSize与FlowBreak一起使用(How to get FlowLayoutPanel.AutoSize to work with FlowBreak)
问题 我的FlowLayoutPanel有问题,我不知道如何解决。 我将两个FlowLayoutPanels放置在另一个中; 第二个内部触发器内部有3个按钮。 FlowLayoutPanel子级的属性为: FlowDirection = LeftToRight; AutoSize = true; AutoSizeMode = GrowAndShrink; WrapContents = true; 现在,我为每个按钮将FlowBreak属性设置为true,但是我看到的不是我想要的行为,我希望FlowLayoutPanel缩小到按钮的宽度, 不能将FlowDirection更改为UpToDown 。 有人知道为什么AutoSize无法正常工作吗? 这是代码。 // //FlowLayoutPanel1 // this.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.FlowLayoutPanel1.Controls.Add(this.FlowLayoutPanel3); this.FlowLayoutPanel1.Location = new System.Drawing.Point(84, 77); this.FlowLayoutPanel1

2021-05-18 07:55:17    分类:技术分享    c#   winforms   flowlayoutpanel

在Winforms应用程序中调整主窗体的大小时,如何调整面板的大小? [关闭](How do I resize my panels when resizing the main form in a winforms application? [closed])
问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 6年前关闭。 改善这个问题 如果我的winforms应用程序的用户调整了主窗体的大小,则我希望2个面板也与子控件一起伸展。 我怎样才能做到这一点? 回答1 如果我的winforms应用程序的用户调整了主窗体的大小,则我希望2个面板也与子控件一起伸展。 您是TableLayoutPanel(MSDN)的理想用例。 如果仅缩放面板,则使用Dock和Anchor是合适的。 但是,由于您希望控件能够很好地缩放,因此您处于AutoLayout世界中,并且很有可能处于TableLayoutPanel中。 (顺便说一下,我是对此的忠实拥护者,尽管过度使用会对布局控件产生负面的性能影响。) 有关使用它来配置布局以进行缩放的一些有用链接: 自动版式示例 WinForms AutoLayout基础:TableLayoutPanel 在TableLayoutPanel上进行视频培训 回答2 玩转面板的Dock和Anchor属性。 回答3 您可以使用TableLayoutPanel并将列宽设置为x%,这样可以将屏幕分为2个部分。TableLayoutPanel必须为Dock才能填充所有表单或Anchor。 TableLayoutPanel可以包含其他面板。 或者

2021-05-19 15:07:52    分类:技术分享    winforms   resize

Find row index of control added to TableLayoutPanel
I need to take an action when a control is added to a TableLayoutPanel in Windows Forms. I am handling ParentChanged event of the control to find out if the control is added to a parent(here TableLayoutPanel), but the index I receive is -1. TableLayoutPanel t; private void button1_Click(object sender, EventArgs e) { // this.Text = tableLayoutPanel1.Height.ToString(); t = new TableLayoutPanel(); t.Dock = DockStyle.Fill; //t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; t.AutoSize = true; //t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; t.RowStyles.Add(new

2021-05-09 07:15:40    分类:问答    c#   .net   winforms   controls   tablelayoutpanel

在网格布局中创建动态按钮-创建魔术正方形UI(Create dynamic buttons in a grid layout - Create a magic square UI)
问题 我应该使用Windows Forms Application在2D中创建一个魔术方块。 它看起来应该像这样: 但是,用户应该能够决定正方形的大小(3x3、5x5、7x7等)。 我已经在控制台应用程序中编写了代码,但是我不知道如何添加2D图形。 有人已经问过这个问题(如何将结果放入GUI中?),答案之一是使用DataGridView ,但是我不确定那不是我要的内容,因为我做不到看起来像图片。 有什么想法或建议吗? 回答1 您可以使用TableLayoutPanel并向面板动态添加按钮。 如果不需要与按钮进行交互,则可以添加Label 。 动态创建正方形: public void CreateSquare(int size) { //Remove previously created controls and free resources foreach (Control item in this.Controls) { this.Controls.Remove(item); item.Dispose(); } //Create TableLayoutPanel var panel = new TableLayoutPanel(); panel.RowCount = size; panel.ColumnCount = size; panel.BackColor = Color

2021-04-12 20:03:50    分类:技术分享    c#   .net   winforms   2d

在Windows窗体中显示控件的集合(Displaying a collection of controls in Windows Forms)
问题 我想显示以下内容:- 每行都与一个进程有关(诸如PID,Parent等信息)。 用户可以选中该checkbox ,然后单击“启动”按钮以获取有关该过程的一些动态详细信息。 问题在于CheckedListBox控件不允许多于一列,而其他控件(如ListView (允许多列))不允许将诸如checkbox控件嵌入到一列中。 我想知道是否有一个控件,该控件将使我拥有一系列自定义控件,其中每个自定义控件都包含一个checkbox ,“ Some Text和“ Some Dynamic Text 。 如何在Windows窗体中实现? 提前致谢。 回答1 您可以使用以下任一选项: DataGridView (示例) 您可以使用DataGridView来显示不同类型的多个列,包括TextBox , Label , CheckBox , ComboBox , Image , Button , Link 。 您还可以通过自定义绘画或添加新的自定义列类型来自定义网格的外观。 用户控件您可以创建包含所需的任何其他控件的复合控件或UserControl并将其用作行模板,然后可以通过在Panel或FlowLayoutPanel中托管该用户控件的多个实例来显示所有行。 TableLayoutPanel (示例) 您可以使用包含多个列和行的TableLayoutPanel。

2021-04-12 10:43:11    分类:技术分享    c#   .net   winforms   user-controls   windows-forms-designer

How do I align a TextBox and Label in TableLayoutPanel?
I have read a few articles on this but none seem to help. How do I align the label and textbox in the following case: Using frm As New frmWithTableLayout frm.TableLayoutPanel1.ColumnCount = 2 frm.TableLayoutPanel1.RowCount = 3 'create report Type' Dim lblReportType As New Label lblReportType.Text = "Report Type" lblReportType.Dock = DockStyle.Right Dim reportType As New System.Windows.Forms.TextBox() reportType.Text = "Income" frm.TableLayoutPanel1.Controls.Add(lblReportType, 0, 0) frm.TableLayoutPanel1.Controls.Add(reportType, 1, 0) End Using

2021-06-13 11:17:21    分类:问答    c#   .net   vb.net   winforms

C# Winforms: Efficiently Displaying Many Controls
I'm building a control that comprises 15x15 = 225 buttons, and needs to be resizable. Because it's a grid, anchoring and docking won't work. I've tried both TableLayoutPanel as well as handling the resize event to manually place and size controls. In both cases, resizing is unacceptably slow. Suspend/Resume Layout in the resize function when I'm manually handling the layout doesn't help. Is there something fundamental that I can change to speed things up, or is this just a limitation of the native controls? I understand I can build a custom control from scratch, handling the clicks and

2021-06-04 13:40:24    分类:问答    c#   winforms   performance

高DPI问题(high DPI problems)
问题 我的 .NET Windows 应用程序在高 dpi 设置下的显示有问题。 所有表格都设置为 AutoScaleMode = DPI,但这并不能解决所有问题。 基本上标签最终会扩大大小以应对更大的字体,但其他控件的位置不会改变,我们最终会出现标签遮挡其他控件或彼此。 屏幕应该是这样的:http://www.manageinvest.com/good.jpg ..在高 DPI 下它最终看起来像这样:bad.jpg(这是我的第一篇文章,所以我只允许一个链接) 有什么建议么? 提前致谢, 克里斯蒂安 回答1 理论上,Winforms 中的字体和 DPI 缩放是自动的。 在实践中......没有那么多。 我注意到它处理垂直缩放比处理水平缩放更好,但即便如此,它也远非完美。 根据我的经验,只有当您执行以下两项操作之一时,缩放才可靠: 根本不要使用设计器。 这很痛苦,但它确实为您提供了对布局的必要控制。 使用内置布局控件 - 特别是FlowLayoutPanel和TableLayoutPanel 。 这些家伙是你最好的朋友; 我很少在没有它们的情况下在 Winforms 中做任何事情。 在你的情况下,我可能会选择#2。 根据屏幕截图,我认为将您的布局放入TableLayoutPanel和FlowLayoutPanel容器的组合中会很容易 -

2021-06-11 10:04:17    分类:技术分享    .net   dpi   winapp

Center multiple rows of controls in a FlowLayoutPanel
I'm trying to make a panel that would host dynamically added controls. There are two caveats: There are going to be a lot of controls, so the panel should wrap the elements into new rows as it reaches its width limits and scroll vertically. Controls can change in size, which would change the number of elements that can fit into a single row. I've seen a couple proposed solutions to center dynamic controls in a Form and rejected those for following reasons: TableLayoutPanel - main issue I have with using this are the events when elements grown and have to shift from 3-2 grid to 2-4, as

2021-03-27 07:20:34    分类:问答    c#   .net   winforms   tablelayoutpanel   flowlayoutpanel

C#WinForms垂直对齐的文本框等(C# WinForms Vertical Alignment for TextBox, etc)
问题 我正在一个项目中,更新其WinForms应用程序UI以使其与尺寸更加一致。 默认情况下,即使使用相同的字体,TextBox和ComboBox控件的高度也不同。 我已经能够通过关闭AutoSize来调整文本框的大小,但是文本仍然紧靠控件的顶部,在下面留有空隙。 有什么办法可以使文本在控件中垂直居中吗? 回答1 如果要在AutoSize上关闭AutoSize ,则它必须是Label ,因为TextBox没有AutoSize属性。 Label的TextAlign属性的类型为ContentAligment ,因此您可以设置水平和垂直对齐方式。 由于各种无聊的原因,Windows中的TextBoxes旨在自动将其高度调整为所使用的字体。 要控制文本的高度并使其垂直居中,您可以快速创建一个自定义UserControl ,您可以使用该UserControl替换所有TextBoxes 。 在您的UserControl ,将BorderStyle设置为Fixed3D ,将BackColor为System.Window 。 添加一个TextBox并将其BorderStyle设置为None 。 在控件的Resize事件中,添加代码,使TextBox与用户控件的客户区具有相同的宽度(考虑边框像素),并将其左对齐(即textBox1.Left = 0; )并将其垂直居中(例如textBox1.Top

2021-05-07 04:04:12    分类:技术分享    c#   winforms   alignment

Rendering a generated table with TableLayoutPanel taking too long to finish
My program is pretty straight forward in concept - it allows a user to take scores during bowling tournaments, as well as showing the players the scores through a scoreboard. There's a score sheet form in which they enter scores, and a scoreboard form that shows the scores to the players, by division. The scoreboard is run in a different thread than the main program. The scoreboard is comprised of a TableLayoutPanel which I manipulate programmatically to represent a table of the scores to show. My issue with this is that it takes a long time (especially for a long list of players) for the

2021-05-14 17:32:15    分类:问答    c#   winforms

TableLayoutPanel的行/列着色(vs2008,winform)(Row/Column coloring for TableLayoutPanel (vs2008, winform))
问题 我可以在TableLayoutPanel中为整个行或列添加特定颜色吗? 如何 ? 请提供示例代码(如果有).. 感谢在广告中。 回答1 是的你可以。 使用TableLayoutPanel的CellPaint事件来测试哪个行/列调用了该事件,然后对矩形使用Graphic对象大小来设置单元格的颜色。 像这样(对于第一行和第三行): private void Form_Load(object sender, EventArgs e) { this.tableLayoutPanel1.CellPaint += new TableLayoutCellPaintEventHandler(tableLayoutPanel1_CellPaint); } void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e) { if (e.Row == 0 || e.Row == 2) { Graphics g = e.Graphics; Rectangle r = e.CellBounds; g.FillRectangle(Brushes.Blue, r); } } 回答2 我发现此答案更容易实现: 这使我可以在单元格上放置完整的背景色。 创建一个具有背景色的Panel ,然后我将Panel

2021-05-24 14:01:53    分类:技术分享    winforms   visual-studio-2008

How do I feed values to the statusStrip from a form control?
This is the context of my controls: /* Form StatusStrip ToolStripStatusLabel TableLayoutPanel MyGenioView */ So, MyGenioView is intercepting the MouseMove event handler. The code that is already there is for a rubber band rectangle. So I have: public void MyMouseMove(Object sender, MouseEventArgs e) { Point ptCurrent = new Point(e.X, e.Y); // If we "have the mouse", then we draw our lines. if (m_bHaveMouse) { // If we have drawn previously, draw again in // that spot to remove the lines. if (m_ptLast.X != -1) { MyDrawReversibleRectangle(m_ptOriginal, m_ptLast); } // Update last point. m_ptLast

2021-04-21 13:13:15    分类:问答    c#   winforms   onmousemove   statusstrip

WinForms Designer and TableLayoutPanel SmartTag Customization
I am trying to customize the existing Smart Tag content for a TableLayoutPanel Windows Forms control for use in the Windows Forms designer (I implemented a designer that leverages the WinForms designer features exposed by the System.ComponentModel.Design and System.Windows.Forms.Design namespaces). Whatever approach is offered as a solution, it's got to also work when my control is added to the Visual Studio toolbox and when my control is placed on a WinForm surface in design mode while in the Visual Studio IDE. Here's what I'm trying to do: In design mode, a TableLayoutPanel control instance

2021-04-20 07:05:01    分类:问答    c#   .net   winforms   windows-forms-designer   tablelayoutpanel

WinForms 中的右对齐标签(Right-aligned labels in WinForms)
问题 在 WinForms 中右对齐Label的最明显方法不起作用:将锚点设置为顶部/底部右侧,将 TextAlign 设置为顶部右侧。 如果文本更改,则标签的左坐标保持不变,而不是右坐标(有人可能会争辩说,这是一个错误)。 出于这个原因,我一直使用全角TableLayoutPanel来显示右对齐标签。 然而,这并不总是很方便,这取决于所讨论的布局...... 所以,我想知道是否还有其他方法可以让我从未想过的 WinForms 中的 Label 保持右对齐? 回答1 一个简单的选择是禁用AutoSize (设置为false )并使其过大,以便有空闲空间。 或者,也许可以使用Dock而不仅仅是Anchor ,尽管这具有不同的含义,因此您可能需要将其放在Panel或类似内容中)。 最终这就像第一个一样 - 首先是过度调整它; 所以也许第一个选择更简单。 回答2 使用带有停靠标签的 TableLayoutPanel 是我发现的在 Winforms 中放置右对齐标签的唯一可靠方法。 关闭 AutoSize 并使用超大标签似乎会导致高 DPI 用户出现奇怪的异常情况。 回答3 使用 FlowLayoutPanel 来做到这一点效果很好。 flowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft

2021-06-10 07:43:53    分类:技术分享    .net   winforms   label

使用窗体调整大小调整控件(Resize Controls with Form Resize)
问题 我已经阅读了几个堆栈溢出问题,但没有找到解决我的问题的有效方法。 每当调整窗体大小时,如何调整控件大小? 我希望它们在表格变大或变小时变大或变小。 在Visual Basic中,使用form.Zoom属性非常容易(当然,它实际上并不需要调整控件的大小,但是可以解决我所需要的内容)。 不幸的是,这在C#winforms中不可用。 这是我没有运气尝试过的其他方法: private void formMain_Resize(object sender, EventArgs e) {/* double scale; this.scaleWidth = (float)this.Width / (float)this.origWidth; this.scaleHeight = (float)this.Height / (float)this.origHeight; if (this.scaleHeight > this.scaleWidth) { scale = this.scaleHeight; } else { scale = this.scaleWidth; } foreach (Control control in this.Controls) { control.Height = (int)(control.Height * this.scaleHeight); control

2021-04-06 14:41:16    分类:技术分享    c#   winforms   resize   controls

Editbox portion of ComboBox gets selected automatically
I have a small problem that has been annoying me for some hours. In my WinForms (.NET 3.5) application I create some ComboBoxes (DropDownStyle = DropDown) in a TableLayoutPanel at runtime and fill it with strings. The ComboBoxes are configured to resize automatically (Anchor = Left | Right). The problem is that whenever the ComboBoxes are resized (i.e. the dialog is resized), the editbox portion of the ComboBox gets selected/highlighted entirely. In my opinion this creates a very confusing effect for the customer which I want to avoid. The problem doesn't appear if the ComboBox has a fixed

2021-04-24 17:25:35    分类:问答    c#   .net   winforms   combobox

支持DPI和默认字体更改(Supporting DPI and Default Font Changes)
问题 因此,我试图弄清Form的AutoScaleMode属性如何可以帮助支持字体或DPI与工作开发机器不同的系统。 从SDK中: AutoScaleMode枚举公共枚举AutoScaleMode 没有任何 自动缩放功能已禁用。 字形 控制相对于尺寸的比例 类使用的字体,通常是 系统字体。 Dpi 控制相对于显示分辨率的比例。 常见分辨率为96和120 DPI。 默认情况下,.NET 2.0窗体使用AutoScaleMode.Font。 因此,我在Windows XP,Tahoma 8 pt,96 DPI开发计算机上设计了一个示例表单。 然后我在一个 14磅Segoe UI 96 DPI机器 14磅Segoe UI 150 DPI机器 如下面的屏幕截图所示,结果并不令人鼓舞: AutoScaleMode属性并非旨在启用.NET Form来支持不同的字体或DPI设置。 那么,支持不同字体和DPI设置的正确方法是什么? 回答1 正确的方法是缩放控件,窗体本身和其中的文本。 这听起来很复杂,但是布局控件(TableLayoutPanel和FlowLayoutPanel)与AutoSize属性结合使用,使此操作的难度大大降低。

2021-04-29 00:58:08    分类:技术分享    .net   winforms   dpi   highdpi

ElementHost 中 WPF 控件的渲染问题(Rendering issue with WPF controls inside ElementHost)
问题 我有一个 WinForms 控件,里面有一个TableLayoutPanel ,它包含多个ElementHosts ,每个ElementHost包含一个 WPF 控件。 一切正常,除非控件的大小大于 window 并且ScrollBar在那里; 当我向下滚动时,控件被渲染扭曲,就像这样 - 在最大化窗口或重新调整窗口大小时,控件会正确呈现(减小大小使控件超出可见区域,然后再次增加大小以将它们带回可见区域) 这不会发生在同一个窗口中的 WinForms 控件中,只是 WPF 控件; 知道为什么会发生这种情况以及对此有什么解决方案吗? 回答1 this.Loaded += delegate { var source = PresentationSource.FromVisual(this); var hwndTarget = source.CompositionTarget as HwndTarget; if (hwndTarget != null) { hwndTarget.RenderMode = RenderMode.SoftwareOnly; } }; 尝试在您托管的 wpf 控件中使用它。 这是在 win 窗体中托管的 wpf 控件的已知呈现问题。 将渲染模式更改为仅软件可以解决问题。 回答2

2021-06-03 17:41:44    分类:技术分享    c#   .net   wpf   winforms   elementhost

How to make RightToLeftLayout work for controls inside GroupBoxes and Panels?
According to MSDN form.RightToLeftLayout = True; form.RightToLeft = ifWeWantRTL() ? RightToLeft.True : RightToLeft.False; is enough to mirrow the form content for RTL languages. But controls placement gets mirrowed only for controls immediately on the form, those inside a GroupBox or a Panel are not mirrowed, unless I put them on a TableLayoutPanel or a FlowLayoutPanel fisrt. This is a lot of manual work to place a TableLayoutPanel inside each GroupBox, and especially to rearrange the controls (one control per table cell, padding, margin, etc) Is there an easier way to make mirrowing work for

2021-04-20 17:22:03    分类:问答    .net   winforms   localization

C#:如何让用户控件正确地自动调整大小(C#: How to get a user control to properly auto size itself)
问题 我有一个UserControl ,它由一个Label (顶部)、一个FlowLayoutPanel (填充、自上而下流和无换行)和一个Panel (底部)组成。 用户控件根据它获取的内容列表创建许多控件,并将它们添加到FlowLayoutPanel 。 我怎样才能让这个UserControl正确调整自己的大小,以便FlowLayoutPanel没有任何滚动条? 我试图在FlowLayoutPanel和UserControl本身上使用AutoSize和AutoSizeMode各种组合,但我似乎无法让它工作。 要么我最终得到的东西根本不会调整自己的大小,要么它变得不够大,要么被压扁成几乎没有。 回答1 感谢所有的建议。 这次的解决方案似乎将FlowLayoutPanel和UserControl本身的AutoSize设置为true 。 现在,如何获取将包含此UserControl以及其他一些控件的表单,我目前无法弄清楚,但我想这应该是一个单独的问题...... 回答2 您可以使用 UserControl 的 Anchor- 和 Dock 属性来设置选项,以便控件的边缘“粘合”到 UI 的其他部分。 当 UI 调整大小时,您的控件将随之而来! 如果您在用户控件中的所有控件上使用锚点和停靠点并将它们设置为停靠控件的边缘,则控件将随 UserControl 调整大小,您现在也可以将锚点

2021-06-05 03:25:49    分类:技术分享    c#   winforms   dynamic   user-controls

Windows Forms DPI缩放(Windows Forms DPI scaling)
问题 我的应用程序在DPI设置为100%的情况下看起来不错,但是当用户选择其他(125%或150%)的单词时,它们就不能放入容器中。 我尝试使用在这里找到的解决方案来解决此问题:检测Windows字体大小(100%,125%,150%),即: this.AutoScaleMode = AutoScaleMode.Dpi; 它修复了150%的设置(使它有些模糊,但是没关系),但是不幸的是,对于应用程序打算在PC上使用的125%,它的设置没有相同。 是否有一些简单的解决方法,还是我必须手动重新排列每个表格? 回答1 创建可识别DPI的应用程序 所有容器都必须使用相同的AutoScaleMode-这部分解决了我的问题 要求Windows应用程序在不同的分辨率下应具有相同的布局,这意味着更改分辨率不会影响应用程序的布局。 这是执行此操作的步骤。 使用表格布局面板将控件拖到tablelayoutpanel的单元格中,并设置anchor和dock属性。 设置拖动控件的rowpan和colspan属性以合并单元格设置相对于单元格的拖动控件的边距和填充。 拖动所有控件并遵循相同的步骤,使用tablelayoutpanel完成设计现在设置tablelayoutpanel的所有列和行的大小= autosize(或以%为单位) 设置tablelayoutpanel属性autosize = true

2021-05-31 19:27:35    分类:技术分享    c#   winforms   dpi

VB / C#:相等地调整两个控件的大小(VB / C#: Resizing two controls equally)
问题 我已经创建了一个窗口,其中将有两个组/面板以及它们之间的一些按钮。 我想用以下方式编写尺寸调整行为的代码:当窗口扩展时,两个面板增加其宽度,同时保持它们之间的距离恒定。 请查看此样机: 如您在上面看到的,我希望调整“本地”和“服务器”面板的大小,同时保持它们之间的距离相同。 如果使用锚点(顶部+左侧+右侧+底部),则左侧面板将与右侧面板重叠,右侧面板的宽度将从窗口中移出。 我希望他们平均分配增加的窗口宽度。 至于它们之间的按钮,我一直将ancors保留为Top。 通过从按钮中删除“左锚”,当窗口扩展时,它会自动将其自身放置在窗口的中央,这正是我想要的方式。 有任何想法如何管理面板的大小? 谢谢。 回答1 使用TableLayoutPanel控件。 首先将TableLayout添加到Form并将其Dock()属性设置为Fill。 接下来,您需要设置3列和2行。 将两个按钮添加到中间列,每个按钮都在其自己的行中。 然后,设置列值,如下所示: 将两者的行都保留为50%。 现在,将您的两个GroupBox添加到第一行的第一列和第三列中。 对于两个GroupBox,将Dock()设置为Fill,将RowSpan()设置为2。对于顶部的按钮,仅打开底部的锚点。 对于底部的按钮,仅转动顶部锚。 对于TableLayoutPanel,将Padding()设置为5,5,5,5。

2021-05-21 10:20:43    分类:技术分享    visual-studio   resize   anchor   panel   groupbox

winforms手风琴[关闭](winforms accordion [closed])
问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 6年前关闭。 改善这个问题 有人知道ac#winforms手风琴控制吗? 最好是开源或免费的。 回答1 这是一个使用CheckBox控件的Appearance的基本示例,其中Header的Appearance设置为Button 。 在sourceforge上下载accordion.cs。 演示代码: Accordion acc = new Accordion(); acc.CheckBoxMargin = new Padding(2); acc.ContentMargin = new Padding(15, 5, 15, 5); acc.ContentPadding = new Padding(1); acc.Insets = new Padding(5); acc.ControlBackColor = Color.White; acc.ContentBackColor = Color.CadetBlue; TableLayoutPanel tlp = new TableLayoutPanel { Dock = DockStyle.Fill, Padding = new Padding(5) }; tlp.TabStop = true; tlp

2021-04-03 22:21:35    分类:技术分享    c#   winforms   accordion   accordionpane

从VSTO Outlook外接程序中打开WPF表单(Open WPF form from a VSTO outlook addin)
问题 我在Thisaddin.cs中有此代码 public void Search(string input) { ServerList listofservers = new ServerList(); listofservers.Visibility; } ServerList是带有列表框的简单WPF表单,但是如何显示listofservers ? 我找不到listofserver.show(); 回答1 因此,首先没有称为WPF表单的项目,只有WPF的用户控件。 因此,一旦在XAML中创建了WPF UserControl,您就会注意到这是代码 <UserControl x:Class="SQL_openertak2.ServerList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d

2021-05-11 18:14:35    分类:技术分享    c#   wpf   vsto

如何使RightToLeftLayout对Gr​​oupBoxes和Panel中的控件起作用?(How to make RightToLeftLayout work for controls inside GroupBoxes and Panels?)
问题 根据MSDN form.RightToLeftLayout = True; form.RightToLeft = ifWeWantRTL() ? RightToLeft.True : RightToLeft.False; 足以复制RTL语言的表单内容。 但是控件位置仅在窗体上立即用于控件位置, 除非我将它们放在TableLayoutPanel或FlowLayoutPanel字段上,否则不会对GroupBox或Panel内的那些进行复制。 将TableLayoutPanel放置在每个GroupBox内,这是很多手动工作,尤其是重新排列控件(每个表单元格,填充,边距等一个控件) 有没有更简单的方法可以使所有控件的镜像工作? 或至少,我如何绕过重新排列步骤,因为这对我们的表格数量来说是一项艰巨的任务? 编辑:默认情况下,窗体上每个控件的RightToLeft属性是继承的, 因此Panel和GroupBoxes始终具有所需的RightToLeft设置。 但是,我尝试以编程方式和从设计师那里为他们重新分配,但没有帮助。 回答1 它确实看到您手上有一个很讨厌的问题。 已经玩了一段时间,并提出以下建议: 利用一点递归,您可以运行所有控件,并对Pannels和GroupBox中捕获的那些控件执行manaul RTL转换。 这是我拍过的快速的模拟代码。 我建议您将其放在BaseForm中

2021-05-18 04:01:41    分类:技术分享    .net   winforms   localization

如何为控件及其子控件暂停绘画?(How do I suspend painting for a control and its children?)
问题 我有一个控件,我必须对其进行较大的修改。 我想完全避免重绘,而SuspendLayout和ResumeLayout不够。 如何为控件及其子控件暂停绘画? 回答1 在我之前的工作中,我们一直在努力获取丰富的UI应用程序以立即流畅地进行绘制。 我们正在使用标准的.Net控件,自定义控件和devexpress控件。 经过大量的谷歌搜索和反射器使用后,我遇到了WM_SETREDRAW win32消息。 当您更新控件时,这实际上会停止控件图形,并且可以将IIRC应用于父/包含面板。 这是一个非常简单的类,演示如何使用此消息: class DrawingControl { [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam); private const int WM_SETREDRAW = 11; public static void SuspendDrawing( Control parent ) { SendMessage(parent.Handle, WM_SETREDRAW, false, 0); } public static void ResumeDrawing( Control parent ) {

2021-03-31 05:07:18    分类:技术分享    c#   .net   winforms   paint

  对于SAP凭证输入和凭证管理来说,有一个基本概念需要解释,那就是“清账”。在财务管理中,有些科目只需要“借贷余”的管理就可以了,比如银行科目和损益类科目等。但是,也有些科目不止需要“借贷余”,还需要管理到每一个分录行的状态,比如银行未达科目,客户和供应商的明细科目等。系统中需要记录供应商的每张发票是否已经付款了,客户的每张发票是否已经收账了,各种未达的资金项是否已经到账了,等等。对于这些科目来说,每笔交易都要分门别类地予以记录,这就是行项目清账。行项目是逐笔逐清的. 已经付款的发票和付款洗本身用绿灯显示,我们称为“已清项”;还未付款的发票用红灯显示,我们称为“未清项”;类似付款、收款这样的业务,在账务处理的同时,系统会自动更新凭证行的状态,这就是“清账”。清账是可以手工的,也可以是系统自动的。当系统自动清账时,我们需要提供给系统“自动清账规则”——比如,“用支票等支付凭证号码”来清银行未达账,就是一种自动清账规则。 一个总账科目是否需要执行清账管理是在其科目维护的公司代码层定义的。公司代码层的控制字段“未清项目管理”控制着总账科目在不同公司代码下是否需要逐笔逐清。对于不按未清项目管理的科目来说,它的行项目显示只反映了过账与否,而不反映清账与否。 对于应收应付等一些科目来说,未清项管理的好处是显而易见的。它使得每条业务记录都很清楚,是对账和自身核对的强有力的工具

2021-06-03 01:06:55    分类:博客    

Disable jumping between buttons by using arrow keys
I have a WinForms form with a TableLayoutPanel on it. In this TableLayoutPanel, I have 2 Button controls. I press one of these buttons. Then I press the Up or Down arrow (↑ ↓) on the keyboard. The focus jumps from one button to the other. I don't want this behaviour. Setting the TableLayoutPanel's "TabStop" to "False" doesn't help. I would instead like to intercept the event and set the focus to another control manually. However, I didn't find the event that I need to intercept. How could I disable this jumping by arrow keys? Which event would I have to intercept to set the focus to another

2021-05-12 19:57:49    分类:问答    c#   .net   winforms   button

Clearing many textbox controls in vb.net at once
I am using the following code to clear the txtint1.Clear() txtext1.Clear() txttot1.Clear() txtint2.Clear() txtext2.Clear() txttot2.Clear() txtint3.Clear() txtext3.Clear() txttot3.Clear() txtint4.Clear() txtext4.Clear() txttot4.Clear() txtint5.Clear() txtext5.Clear() txttot5.Clear() txtint6.Clear() txtext6.Clear() txttot7.Clear() txtint8.Clear() txtext8.Clear() txttot8.Clear() Is there any possibility to clear all the textbox controls at once or with few lines of code?

2021-06-10 21:26:56    分类:问答    vb.net   textbox

Direct2D / GDI+ and slow Windows forms drawing - What can be done?
I'm working a lot with Visual Studio 2008, .NET C# 2.0-3.5 and Windows Forms and I have noticed, like many before me, that GDI+ is extremely slow in drawing Controls. Note that I do not deal with images (JPG, GIF etc) very much. Images are only as icons in certain places. This is actually Controls/Forms/etc that are slow to draw. The issue is that you can see Controls being drawn and it can take several seconds for a seemingly easy set of Controls to be drawn. Ie, its lagging and horrible. I have made tests where I just put a number of Labels (40-50) on a form, hitting F5 to run and have to

2021-06-10 02:43:49    分类:问答    c#   gdi   direct2d   slimdx   devexpress-windows-ui

Asp.net网站的首次启动非常缓慢(Asp.net website first start is very slow)
问题 第一次将网站加载到生产Web服务器中时,它的启动速度非常慢,随后的页面加载速度非常快(包括主页)。 我已经对该站点进行了预编译,但是没有任何变化。 我在应用程序启动时没有任何代码。 我没有缓存的项目。 有任何想法吗? 我怎么知道发生了什么事? 回答1 只是您的应用程序域正在加载并将任何二进制文件加载到内存中。 另外,它正在初始化静态变量,因此,如果您有一个静态变量可以从数据库中加载大量数据,则可能会花费一些时间。 回答2 发布网站时,您是否选择在发布网站的设置中使网站“可更新”? 如果我没有记错的话,也需要编译aspx / ascx文件,并且如果它们是“可更新的”,那么第一次启动将导致这些资源的重新编译。 回答3 您是否已在web.config中打开了跟踪功能? 回答4 尝试清除您的事件日志? 回答5 使用http://www.iis.net/expand/ApplicationWarmUp来预热您的应用程序,这是针对IIS 7.5的-因此,如果您在Server R2上运行,它将可以正常工作。 回答6 确保在“发行版”而不是“调试”中发布应用程序。 我注意到这大大减少了加载时间。 web.config文件将被更新。 回答7 这听起来很像是后台编译。 但是,如果您要进行预编译,那不应该是一个问题。 我首先要看的是您的ORM(如果有)。 尤其是NHibernate

2021-05-07 00:21:08    分类:技术分享    asp.net

需要一个非常定制的大型Winforms网格(Need a very customized large Winforms grid)
问题 我将要开发Windows PC应用程序(可以是WinForms或WPF),而我主要关心的是我将要解决的UI问题。 基本上,我需要有一个大约50x50的网格,我需要从用户那里获取输入。 那是2500个字段。 实际上,大多数将保留为空白,用户将填写约10%。 每个字段可以是空白,也可以是1到4之间的数字。我想输入简单-可能是一个下拉框(因为使用键盘在所有2500个字段之间切换没有意义,我希望用户填写鼠标中的值)。 我当时在想下拉框甚至单击它们时会更改值的标签,但是问题是(根据我所做的测试)添加2500的任何类型的控件会使界面非常慢。 我试着在WinForms应用程序中使用tablelayoutpanel并使用suspend / resumeupdate函数,还使用了双重缓冲,这虽然有所帮助,但是仍然非常慢。 我不愿意使用DataGridView路由,因为我需要非常自定义的标头,并且随着用户更改字段中的值,我需要UI自动更新某些百分比。 但是,如果那是我唯一的选择,我将不会反对。 我听说WPF可能更好,因为您可以有很多控件,而且每个控件都没有自己的Windows句柄,并且具有虚拟化功能(不确定实现的难度)。 我愿意提出建议。 我知道有人会建议打破网格,而我最终可能会这样做。 无论哪种方式,我都想知道在Windows应用程序中具有许多控件的大型网格的最有效方法

2021-05-24 21:52:36    分类:技术分享    c#   wpf   winforms   user-interface   datagridview

Rendering issue with WPF controls inside ElementHost
I am having a WinForms control, inside that I have a TableLayoutPanel which holds multiple ElementHosts and each ElementHost contains a WPF control. Everything works fine except when the size of controls is bigger then window and ScrollBar is there; when I scroll down, the controls get rendered distorted, like this - On maximizing the window or re-sizing it, controls render properly (reducing the size such that controls go out of visible area and then increase the size again to bring them back in visible area) This doesn't happen with WinForms control in the same window just the WPF ones; any

2021-05-17 19:44:53    分类:问答    c#   .net   wpf   winforms   elementhost

Prevent redrawing of controls on resize for Windows Forms
I have a TableLayoutPanel which holds a dynamic number of controls inside a SplitterPanel. A user may want to resize the panel to fit these Controls to avoid use of a scroll bar. This creates jitter on the container resize as well as the controls within the container. Sometimes the parent container lags significantly behind movement of the mouse during resize (up to a 3 second lag). Is there any way to prevent redrawing of Controls during a parent container resize, such as hiding all elements during resize or halting a resize event which occuring during a mousedrag, firing only on an onMouseUp

2021-04-27 09:50:32    分类:问答    c#   winforms   vsto

在Windows窗体控件中调整大小以及调整窗体大小(Resize in Windows Forms controls along with form resize)
问题 我的C#Windows Forms应用程序中有一些控件(组框,表格,GridView等),我想根据屏幕的宽度/高度来缩放它们。 例如,屏幕开始于640x480,然后最大化到1920x1200。 我希望能够增加控件的宽度/高度,以便在调整窗口大小后它们看起来完全一样。 无需手动设置每个width / height属性的最佳方法是什么? 回答1 无需手动设置每个width / height属性的最佳方法是什么? 您可以使用Anchor和Dock属性来使控件根据其包含的元素缩放,而不必指定宽度和高度。 或者,您可以使用TableLayoutPanel或FlowLayoutPanel布置控件。 回答2 我相信您想要控件的Anchor属性。 顾名思义,此属性强制控件将自身锚定在父窗体或控件内的相对或绝对位置。 此属性具有四个可以打开或关闭的值: Top -- Indicates that the control should keep its top edge stationary in respect to the parent form (or control) top edge. Bottom -- Indicates that the control should keep its bottom edge stationary in respect to the parent

2021-05-18 13:26:45    分类:技术分享    c#   winforms   size   height   width

Drawing and clearing on screen with Graphics.FromHwnd
I am trying to create a program which gets the handle of the window under your cursor, show's some data about it and draws a filled rectangle (with very low alpha) on top of the whole window. I am using C# and winforms. I have succeeded in doing so, but the problem is my draw method is in a BackgroundWorker's loop and it keeps making more and more rectangles (-> rectangle with higher alpha) on the window or when moving mouse to another window the old one still exists. I haven't managed to find a method to clear the drawn rectangle as it just "is" on the screen and isn't bound to the graphics

2021-06-10 14:22:40    分类:问答    c#   winforms   graphics   screen   handle

Docked controls placed within TableLayout do not automatically size smaller than their creation size
This issue is better demonstrated than explained, so I've set up a git repo with Visual Studio 2010 project that be used to see the issue in action. I have a project where I've added a ComboBox control (comboField) to a TableLayout control (tableLayoutPanel1). I've set the Dock property of the ComboBox to Fill so that it fills the cell of the TableLayout control that it has been placed in. I've also set the Dock property of the TableLayout control to Fill so that it fills the Form that it has been placed on. The width of the ComboBox is currently 193 pixels. When I run the form and increase

2021-06-13 15:57:54    分类:问答    c#   .net   winforms   visual-studio-2010   tablelayoutpanel

获取Windows窗体中TableLayoutPanel单元格的高度和宽度(Get height and width of TableLayoutPanel cell in Windows Forms)
问题 在Windows窗体中使用TableLayoutPanel。 我正在将RowTypes和ColumnStyles与SizeType分别用作AutoSize和Percent。 我需要找出放置特定控件的单元格的绝对高度和宽度。 TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1); int height = (int)tableLayoutPanel1.RowStyles[pos.Row].Height; int width = (int)tableLayoutPanel1.ColumnStyles[pos.Column].Width; 上面,我的身高为0。RowStyle的SizeType为AutoSize。 同样,我的评分为33.33。 设置ColumnStyle的SizeType为Percent,Size = 33.33。 我需要获取单元格的绝对大小(以像素为单位)。 回答1 出于某种奇怪的原因,微软决定将这些功能隐藏在智能感知中。 这应按书面形式进行: TableLayoutPanelCellPosition pos = tableLayoutPanel1.GetCellPosition(button1); int width = tableLayoutPanel1

2021-05-17 22:16:07    分类:技术分享    c#   .net   winforms   cell   tablelayoutpanel

Web设计中控件的选择单词 "toggle" 指的是一个带有手柄的拨动式开关,往不同的方向上拨动,可在不同的状态之间切换。至于单选框(Radio Button)一词,最早来自于汽车收音机,通常表盘下面有一组按钮,可以机械地存储电台的预设,因此用户可以更快地在不同的电台之间切换。多选框(Checkbox):当有一个或多个独立选项时,用户可以选择任意数量的选项,包括无、一个或多个选项。单选框(Radio Button):当存在两个或多个互斥项中且只能选择一个选项时使用拨动开关(Toggle-Switch):表示两种相互对立的状态间的切换,多用于触发「开/关」选择按钮(Choice Chips):是单选框的简化样式,通常备选项至少包含2个选项,用户可以选择其一多选按钮(Multi-select Chips):是多选框的一种通用样式,允许用户选择多个项,主要用于移动端设备上各类选择控件,已经在UI中存在了很长时间,所以用户对于它的认知、功能以及行为操作有明确的心理预期和感知。下面列举了绝大多数常见的选择控件的类型和使用场景:1. 控件的不同状态单选框、多选框有选中和取消选中两种状态,而拨动开关则具有开启和关闭两种状态,它们都有:默认、选中、激活、禁用、悬停、按下等不同状态,这些状态覆盖不同的交互需求和场景,是实现更优用户体验的基础。2. 别忘了【未定状态】对于多选框

2021-04-19 15:57:35    分类:博客    WEB前端

如何在DataGridViewCell中托管控件以进行显示和编辑?(how do I host a control in a DataGridViewCell for displaying as well as editing?)
问题 我已经看过“如何:在Windows窗体DataGridView单元中托管控件”,其中介绍了如何托管用于在DataGridView中编辑单元格的控件。 但是,如何托管用于显示单元格的控件? 我需要在同一单元格中显示文件名和按钮。 我们的UI设计师是图形设计师,而不是程序员,因此无论是否可行,我都必须将代码与他绘制的内容相匹配。 我们正在使用VS2008并为.NET 3.5用C#编写,如果这样做有所不同。 更新:'网络建议创建一个自定义的DataGridViewCell,作为第一步,它托管一个面板。 有人这样做吗? 回答1 按照您的“ UPDATE”,创建自定义DataGridViewCell是完成此操作的方式。 我已经做到了,它不需要对MSDN上的示例代码进行太多修改。 就我而言,我需要一堆自定义编辑控件,因此最终从DataGridViewTextBoxCell和DataGridViewColumn继承。 我在我的类(从DataGridViewTextBoxCell继承的类)中插入了一个实现IDataGridViewEditingControl的新自定义控件,并且所有控件都可以正常工作。 我想在您的情况下,您可以编写一个PanelDataGridViewCell ,其中包含一个控件MyPanelControl

2021-05-25 01:52:48    分类:技术分享    c#   .net   datagridview   user-interface

清除ASP.NET中的页面缓存(Clearing Page Cache in ASP.NET)
问题 对于我的博客,我想使用“输出缓存”将某个垂直帖子的缓存版本保存大约10分钟,这很好... <%@OutputCache Duration="600" VaryByParam="*" %> 但是,如果有人发表评论,我想清除缓存,以便刷新页面并可以看到评论。 如何在ASP.Net C#中做到这一点? 回答1 我找到了想要的答案: HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx"); 回答2 如果您知道要清除哪些页面的缓存,上面的命令就可以了。 在我的实例(ASP.NET MVC)中,我从各处引用了相同的数据。 因此,当我执行[保存]时,我想清除整个站点的缓存。 这对我有用:http://aspalliance.com/668 这是在OnActionExecuting过滤器的上下文中完成的。 通过在BaseController或其他内容中重写OnActionExecuting可以很容易地做到这一点。 HttpContextBase httpContext = filterContext.HttpContext; httpContext.Response.AddCacheItemDependency("Pages"); 设置: protected void Application_Start() {

2021-04-03 17:30:07    分类:技术分享    c#   asp.net   outputcache