【问题标题】:How to color one of the table layout pannel controls in c#如何在 C# 中为表格布局面板控件之一着色
【发布时间】:2018-03-16 23:28:43
【问题描述】:

我创建了一个如下所示的 Windows 窗体: My Windows Form

我想要做的是通过将其编号传递给 Form 构造函数来为这些编号按钮之一着色。这是我试图做的,但没有明显的变化。有什么建议吗?

public SeatSelection(string seatNumber)
    {
        InitializeComponent();
        foreach(Control ctrl in this.tableLayoutPanel1.Controls)
        {
            if (ctrl.Text == seatNumber)
            {
                ctrl.BackColor = Color.Red;
            }
        }
    }

if 语句确实找到了 true,BackColor 确实发生了变化,但表单不会更新: Watch

【问题讨论】:

  • 有关该问题的更多信息会有所帮助。当您单步执行代码时,它是否找到 ctrl.Text == seatNumber 并执行 ctrl.BackColor 语句,或者 if 语句永远找不到真正的条件?换句话说,是 if 失败了,还是设置 BackColor 失败了?
  • 发布的代码有效。使用调试器单步调试代码以查看发生了什么。
  • 我认为此时(表单构造函数)表单中的控件尚未完全加载。您是否尝试在 Form.Load 事件中这样做?您可以将座位号存储在一个变量中,在构造函数中设置,然后在 Form.Load 事件中使用它。但是你也可以调试你的构造函数代码来检查按钮是否已经设置了它们的文本属性。
  • 按钮的 FlatStyle 是否设置为 System?

标签: c# windows forms


【解决方案1】:

对不起各位,我的错。这段代码很好。我在其他地方犯了一个错误。我没有意识到我在调用这个之后立即调用了默认构造函数。我的 if 语句中缺少 else 关键字,所以它是

int seatNumber = Convert.ToInt32(txtSeatNumber.Text);
if(seatNumber>=1 && seatNumber<=21)
            seats = new SeatSelection(txtSeatNumber.Text);
        seats = new SeatSelection();
        seats.Show();

代替

int seatNumber = Convert.ToInt32(txtSeatNumber.Text);
if(seatNumber>=1 && seatNumber<=21)
            seats = new SeatSelection(txtSeatNumber.Text);
        else
            seats = new SeatSelection();
        seats.Show();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多