【问题标题】:How to set the many button text at runtime in WinForms?如何在 WinForms 运行时设置多个按钮文本?
【发布时间】:2012-02-18 10:29:05
【问题描述】:

我正在使用 Winform。我已经设置了 20 个按钮和上下按钮,如下所示。 这些按钮的文本值为 button1 = 1;按钮 2 = 2; ... button20 =20 在开始时间。我已经这样做了。

当我按下向下按钮时,20 个按钮的文本已更改为 21 到 40;和向上按钮返回 1 到 20。

btn_Down click event

button21.Text = "21";
button22.Text = "22";
...
..
button40.Text = "40";

and btn_Up Click event

btn_Down click event

button1.Text = "1";
button2.Text = "2";
...
..
button20.Text = "20";

有什么简单的编码方法吗?

更新-

当我尝试 sll 代码时,。

int index = 0;

foreach (var control in this.tableLayoutPanel1.Controls)
 {
     var button = control as Button;
     if (button != null)
     {
        button.Text = String.Format("{0}", index);
        index++;
     }
}

我得到了下面。上下也变了,数字顺序倒了。

请更新答案。

【问题讨论】:

  • 你想实现什么,因为我无法理解“但是当我按下向下按钮时,20 个按钮的文本已更改为 21 到 40;向上按钮返回 1 到 20。 "
  • 我想要 For(i=1;i
  • using System.Linq; form.Controls.OfType<Button>().ForEach(b => b.Text = "...");

标签: c# winforms windows-forms-designer


【解决方案1】:

如果按钮按 1 到 20 的顺序排列,则不需要从按钮名称中提取数字,只需使用自增索引变量即可:

int index = 0;
// either form.Controls or this.Controls dedepnds on where you put this code
foreach (var control in form.Controls)
{
   var button = control as Button;
   if (button != null)
   {
      button.Text = String.Format("Button #{0}", index);     
      index++;
   }      
}

编辑:试试看,因为手头没有环境设置,所以没有检查过

为避免影响向上/向下按钮,请使用特殊标记值标记它,例如 Tag="ControlButton"

using System.Linq;
var buttons = this.tableLayoutPanel1.Controls
                                    .OfType<Button>()
                                    .Where(b => b.Tag != "ControlButton");
int index = buttons.Count();
foreach (var button in buttons)
{
    button.Text = String.Format("Button #{0}", index);     
    index--;
}

【讨论】:

  • 请查看我已注明日期的问题。
【解决方案2】:

您是否想找到一种简单的方法来设置这 20 个按钮控件的 Text 属性以避免不得不一个一个地设置它们?

在这种情况下,您可以遍历表单的控件并检查它是否是按钮。

例如:

foreach(var control in base.Controls)
{
    if (control is Button)
    {
        var button = (Button) control;
        button.Text = ExtractNumber(button.Name);
    }
}

更多关于迭代控件的信息可以在这里找到:

http://www.dotnetperls.com/control

ExtractNumber(...) 方法从按钮的 Name 属性中提取数字。

private string ExtractNumber(string value)
{
    var number = Regex.Match(value, @"\d+").Value;
    return number;
}

【讨论】:

  • 每次如果通过假。所以 ExtractNumber 函数不执行。我如何解决这个问题。
  • 感谢和抱歉,我在 tableLayoutPanel1 中放置了按钮,所以它给出了 False 值。现在我得到了答案。但向上和向下按钮也会受到影响。
  • 您可以将容器控件(例如面板)添加到 tableLayoutPanel 并在其中放置向上/向下按钮。然后它们将在迭代过程中被跳过。
【解决方案3】:

一种简单的方法是在表单中设置一个 Button 对象数组。数组中的每个元素都是您的按钮之一。 然后您可以稍后使用简单的 for 循环遍历按钮。

类似这样的:

for(int i=0; i<buttons.Length; i++)
{
   buttons[i].Text = (i+1).ToString();
}

但是你想做什么?您的问题可能有更有效的解决方案。

【讨论】:

  • 什么是按钮是指 System.Windows.Forms.button 没有长度属性。并且通过错误错误 1 ​​当前上下文中不存在名称“按钮”。我如何解决这个问题?
  • 代码只是一个示例。您必须定义一个长度正确的数组(我建议您将其命名为“按钮”)。您还必须使用对表单中按钮的引用来填充它。您可以在 Form_Load 事件中执行此操作。
【解决方案4】:

也许这可以帮助你:C# create an array of controls

您可以创建一个按钮数组并分配按钮文本,例如:

int i = start_value //e.g. 0 or 20 or 40...
foreach (button b in buttons)
{
    b.Text = i.ToString();
    i++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2013-02-09
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多