【问题标题】:How to display two Label controls side by side in a panel that is docked top?如何在停靠在顶部的面板中并排显示两个标签控件?
【发布时间】:2013-01-04 22:20:31
【问题描述】:

我有一个名为dockTopPanel 对象。我在Panel 中添加了两个标签。我希望标签从左到右流动。这类似于将 css 设置为 float: leftdiv 的预期结果......只是这是 winforms。

我有

   //I want DockStyle.Left, but that causes both controls to be of height, width = 0,0
   dockTop.Controls.Add(new Label() { Text = "one", Dock = DockStyle.Top });
   dockTop.Controls.Add(new Label() { Text = "two", Dock = DockStyle.Top }); 

Dock Top 工作正常,但这不是我想要的。如何在设置为 Dock Top 的面板中从左到右显示彼此相邻的标签?

【问题讨论】:

  • @LarsTech - 我同意你的 TableLayoutPanel 建议。那行得通。
  • 嗯,不,对于像 Label 这样的自动调整大小的控件,您需要一个 FlowLayoutPanel 来并排显示。
  • @HansPassant - 我会在星期一试一试流程布局。

标签: c# winforms


【解决方案1】:

您必须通过设置位置自己放置它们。如果需要,适当地设置锚属性。或者,您可以使用 TableLayoutPanel 而不是 Panel

【讨论】:

    【解决方案2】:

    您必须将Dock 设置为DockStyle.TopDockStyle.Left

       dockTop.Controls.Add(new Label {Text = "one", Dock = DockStyle.Top | DockStyle.Left });
       dockTop.Controls.Add(new Label { Text = "two", Dock = DockStyle.Top | DockStyle.Left });
    

    或者你可以使用AutoSizeDockStyle.Left

       dockTop.Controls.Add(new Label {Text = "one", Dock = DockStyle.Left, AutoSize=true });
       dockTop.Controls.Add(new Label { Text = "two", Dock =  DockStyle.Left, AutoSize = true});
    

    【讨论】:

      【解决方案3】:

      我使用Resize 事件来完成这个任务。希望对你有帮助。

      static class Program
      {
          static Label label1;
          static Label label2;
          static Form form1;
          static Rectangle rectForm;
          /// <summary>
          /// The main entry point for the application.
          /// </summary>
          [STAThread]
          static void Main()
          {
              Application.EnableVisualStyles();
              Application.SetCompatibleTextRenderingDefault(false);
              form1 = new Form();
              rectForm = form1.ClientRectangle;
              Panel dockTopPanel = new Panel {Height = 100, Dock = DockStyle.Top, BackColor = Color.White };
              label1 = new Label { Text = "Label1", Dock = DockStyle.Left, BackColor = Color.Red, Width = rectForm.Width / 2 };
              label2 = new Label { Text = "Label2", Dock = DockStyle.Right, BackColor = Color.Blue, Width = rectForm.Width / 2 };
               label2.BringToFront();
              Control[] labels= {label1, label2};
              dockTopPanel.Controls.AddRange(labels);
              form1.Controls.Add(dockTopPanel);
              form1.Resize += new EventHandler(form1_Resize);
              Application.Run(form1);
          }
      
          static void form1_Resize(object sender, EventArgs e)
          {
              rectForm = form1.ClientRectangle;
              label1.Width = (rectForm.Width / 2) + 1;
              label2.Width = (rectForm.Width / 2) + 1;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-02
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        相关资源
        最近更新 更多