天道酬勤,学无止境

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.Add(Table);

afterwards during runtime I am getting how many rows will I need, and if they will be filled with either a Panel or some Label. It might happen that in the same row left will be Panel, right Label etc..

评论

Use something like this:

Table.Controls.Add(new Label { Text = "Type:", Anchor = AnchorStyles.Left, AutoSize = true }, 0, 0);
Table.Controls.Add(new ComboBox { Dock = DockStyle.Fill }, 0, 1);

You don't need to define number of rows and columns, they will be added automatically.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在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。
  • 在网格布局中创建动态按钮-创建魔术正方形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
  • 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
  • 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
  • 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
  • Add Row Dynamically in TableLayoutPanel
    I want to add these entries dynamically row by row in TableLayoutPanel in Windows Form in c# How can I do that?
  • 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
  • C#在运行时添加具有值的按钮[关闭](C# Adding button with value at runtime [closed])
    问题 关门了。 这个问题需要细节或明确性。 它当前不接受答案。 想要改善这个问题吗? 添加详细信息,并通过编辑此帖子来澄清问题。 4年前关闭。 改善这个问题 我想在运行时将带有值的按钮添加到选项卡控件中。 许多教程展示了在创建与数据库的连接时是如何完成的。 有什么方法可以在不连接数据库的情况下完成的? 在将数据输入到文本框中并单击“保存”后,新按钮应出现在另一窗体的选项卡控件上。 回答1 在您保存按钮中输入: private void btnSave_Click(object sender, EventArgs e) { x = 4; y = panel1 .Controls.Count * 70; Button newButton = new Button (); newButton.Height = 150; newButton.Width = 60; newButton.Location = new Point(x, y); newButton.Text= "your text"; newButton.Click += new System.EventHandler(Button_Click); tabControl1.TabPages [0].Controls.Add(newButton); } 而且,您还可以单击创建的新按钮的单击: public void Button
  • 如何为控件及其子控件暂停绘画?(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 ) {
  • Spring相关知识整理
    IOC 控制反转、依赖注入,将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IOC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory接口是Spring框架的核心接口,它实现了容器许多核心的功能。Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了il8n国际化、Bean生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业服务功能支持,如邮件服务、任务调度、JNDI定位、远程访问。ApplicationContext是Context模块的核心接口;IOC类型;构造函数注入、属性注入、接口注入;提供了实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载;BeanFactory IOC容器,ApplicationContext应用上下文(基于BeanFactory之上)。BeanFactory实现类->XmlBeanFactory ,在初始化beanFactory时,必须为其提供一种日志框架; ApplictionContext 实现类-> ClassPathXmlAppliction(类路径加载配置文件)和FileSystemXmlApplicationContext(文件系统中装载配置文件);BeanFactory在初始化容器时,并未实例化Bean
  • Airflow dynamic tasks at runtime
    Other questions about 'dynamic tasks' seem to address dynamic construction of a DAG at schedule or design time. I'm interested in dynamically adding tasks to a DAG during execution. from airflow import DAG from airflow.operators.dummy_operator import DummyOperator from airflow.operators.python_operator import PythonOperator from datetime import datetime dag = DAG('test_dag', description='a test', schedule_interval='0 0 * * *', start_date=datetime(2018, 1, 1), catchup=False) def make_tasks(): du1 = DummyOperator(task_id='dummy1', dag=dag) du2 = DummyOperator(task_id='dummy2', dag=dag) du3 =
  • 如何在运行时为动态创建的控件添加事件处理程序?(How to add event handler for dynamically created controls at runtime?)
    问题 我正在使用C#Windows应用程序。 我的应用程序从自定义控件库中获取控件(按钮,文本框,富文本框和组合框等),并在运行时动态地将其放入表单中。 我如何使用委托为该控件创建事件处理程序? 以及如何在特定的自定义控件点击事件中添加业务逻辑? 例如: 我有user1,user2,user3,当user1登录时,我只想显示“保存”按钮。 当user2然后仅显示“添加和删除”按钮,而用户3仅显示“添加和更新”按钮时。根据用户创建的文本框和按钮将登录从DB表中获取的信息。保存,更新,删除),以便在动态创建表单控件时为不同的用户保存,添加,删除和更新按钮(保存,添加,删除和更新按钮对象来自同一按钮类) 回答1 使用匿名方法: Button button1 = new Button(); button1.Click += delegate { // Do something }; 使用带有显式参数的匿名方法: Button button1 = new Button(); button1.Click += delegate (object sender, EventArgs e) { // Do something }; 使用匿名方法的lambda语法: Button button1 = new Button(); button1.Click += (object sender
  • 在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
  • AngularJS-UI路由器-以编程方式添加状态(AngularJS - UI Router - programmatically add states)
    问题 在模块配置之后,例如在service中,有没有一种方法可以通过编程方式将状态添加到$ stateProvider? 为了给这个问题增加更多的上下文,我有一种情况,我可以采用两种方法: 尝试强制在模块配置中定义的状态上重新加载,问题是该状态将reloadOnSearch设置为false ,所以当我尝试$ state.go('state.name',{new:param},{reload:真的}); 什么都没发生,有什么主意吗? 州定义 .state('index.resource.view', { url: "/:resourceName/view?pageNumber&pageSize&orderBy&search", templateUrl: "/resourceAdministration/views/view.html", controller: "resourceViewCtrl", reloadOnSearch: false, }) 尝试以编程方式添加我需要从服务加载的状态,以便路由可以正常工作。 如果可能的话,我宁愿选择第一种方法。 回答1 请参阅-edit-以获取最新信息。 通常情况下,状态会在配置阶段添加到$stateProvider中。 如果要在运行时添加状态,则需要保留对$stateProvider的引用。 该代码未经测试,但应执行您想要的操作。
  • 在Asp.Net中动态添加的控件(Dynamically added controls in Asp.Net)
    问题 我试图把头包在asp.net上。 我有很长一段时间的php开发人员背景,但是现在我面临着学习asp.net的任务,并且遇到了一些麻烦。 这很可能是因为我正试图将框架强制用于其不适合的用途-所以我想学习如何以“正确的方式”进行操作。 :-) 我的问题是如何在运行时以编程方式向页面添加控件。 据我所知,您需要在page_init中创建控件,否则它们将在下一个PostBack中消失。 但是很多时候,我遇到的问题是我不知道要在page_init中添加哪个控件,因为它取决于以前的PostBack中的值。 一个简单的场景可能是在设计器中添加了下拉控件的表单。 下拉菜单设置为AutoPostBack。 当发生PostBack时,我需要呈现一个或多个依赖于下拉控件中所选值的控件,并且最好使这些控件的行为就像设计中添加的一样(如“发回时,表现为”正确”)。 我在这里走错了路吗? 回答1 我同意这里的其他观点:“如果您可以摆脱动态创建控件的行为,那就去做吧……”(@ Jesper Blad Jenson aka着),但这是我过去使用动态创建控件解决的一个技巧。 问题是鸡肉和鸡蛋。 您需要使用ViewState创建控件树,并且需要创建控件树才能获取ViewState。 好吧,那几乎是正确的。 有一种方法可以在填充树的其余部分获取ViewState值。 那是通过重写LoadViewState(
  • How to add wpf control to particular grid row and cell during runtime?
    I have the following grid in my WPF "Window" (yes the class Window); <Grid Name="RequiredGrid"> <Grid.ColumnDefinitions> <ColumnDefinition Width="70" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> </Grid> Depending on whats passed into the window, I want to add items into this grid one row at a time. Namely, I want to add a Label in the left column and a TextBox in the right column. I believe I know how to add new rows for holding new data by doing the following in the code behind: RequiredGrid.RowDefinitions.Add(new RowDefinition()); Problem is, after I've created my Label and my
  • How to add event handler for dynamically created controls at runtime?
    I am working on C# windows application. my application get controls(button,text box,rich text box and combo box etc)from custom control library and placed them into form dynamically at run time. how i create event handler for that controls using delegate? and how to add business logic in particular custom control click event? For Example: i have user1, user2, user3, when user1 log in i want to show only "save" button. when user2 then only show "add and delete" buttons and user 3 only show "add and update" buttons.text boxes and button created as per user log in information taken from DB tables
  • Failed to load viewstate. Happening only occasionally. Tough to recreate
    Details of Error are given below. This error happens only occasionally / rarely / sometimes and there aren't any steps to reproduce it. How can I know which Control is throwing this Viewstate error? Error Message: Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request. When: Rarely / Occasionally Steps to Recreate
  • 使用窗体调整大小调整控件(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
  • 我可以在运行时为特定的子视图禁用自动布局吗?(Can I disable autolayout for a specific subview at runtime?)
    问题 我有一个视图,需要以编程方式对其框架进行操作-这是一种文档视图,将其包装到其内容,然后通过操纵框架原点在超级视图周围滚动和缩放。 Autolayout在运行时与此作斗争。 完全禁用自动布局似乎有些困难,因为可以合理地使用它来处理其他视图的布局。 似乎我可能想要某种“空约束”。 回答1 我有同样的问题。 但是我已经解决了。 是的,您可以在运行时为特定的UIView禁用自动布局,而不是对整个Xib或Storyboard(在Xcode 4.3及更高版本中默认设置)禁用自动布局。 在设置子视图的框架之前,将translatesAutoresizingMaskIntoConstraints设置为YES : self.exampleView.translatesAutoresizingMaskIntoConstraints = YES; self.exampleView.frame = CGRectMake(20, 20, 50, 50); 回答2 我有一个类似的问题,即Autolayout在运行时会覆盖我的某些帧设置(我有一个动态视图,在某些情况下,该视图推了一个新的视图控制器...按入,然后按Back将重置初始视图)。 我通过将操作代码放在View Controller的viewDidLayoutSubviews来解决此问题。