gpt4 book ai didi

c# - 使用 WinForms 在 C# 中为 TableLayoutPanel 创建动态 Controller 名称

转载 作者:行者123 更新时间:2023-11-30 23:02:54 25 4
gpt4 key购买 nike

在开发一个从 SQL Server 数据库中提取测试用例、运行和结果的小型应用程序时,我在试图在 WinForms 的 TableLayoutPanel 中创建动态 Controller 名称的方法上遇到了一个难题。当用户选择特定的测试用例时,我正在动态创建行,TableLayoutPanel 将从那里打开另一个窗口,其中预加载了测试步骤和两个单选按钮以指示测试是否通过。我的问题是,当我选择步骤右侧的其中一个单选按钮时,我每次都会读取相同的控制台。我需要能够确定用户按下了哪个单选按钮,这样我就可以确定它在哪一行,以及随后哪些测试通过或失败。我的主要代码如下:

FormManualTest.cs(添加到 TableLayoutPanel 时的部分)

private void addRowToolStripMenuItem_Click(object sender, EventArgs anotherEvent)
{

tableLayoutTest.RowStyles.Clear(); // Clear row styles to ensure a clean start when adding to the TableLayoutPanel

List<RadioButton> listOfRadioControls = new List<RadioButton>(); // Create array of radio buttons
List<UserCustomStep> listOfStepControls = new List<UserCustomStep>(); // Create array of custom controls

for (int i = 0; i < 5; i++)
{
UserCustomStep step = new UserCustomStep(Counter, "Step: " + i + " Push the button to elicit a response."); // Creates new user custom step control instance

RadioButton pass = new RadioButton();
pass.Text = "Pass";
pass.AutoSize = true;

RadioButton fail = new RadioButton();
fail.Text = "Fail";
fail.AutoSize = true;
fail.Margin = new Padding(3,3,20,3); // Needed to see the fail button without having to scroll over

listOfStepControls.Add(step); // Add step to UserCustomStep array

listOfRadioControls.Add(pass); // Add radio buttons to the RadioButton array
listOfRadioControls.Add(fail);

listOfRadioControls[i * 2].CheckedChanged += (s, e) => // Subscribes the pass radio button to listen for when a user has clicked on it
{
Console.WriteLine("Pass " + i + " was clicked");
};

listOfRadioControls[(i * 2) + 1].CheckedChanged += (s, e) => // Subscribes the fail radio button to listen for when a user has clicked on it
{
Console.WriteLine("Fail " + i + " was clicked");
};

tableLayoutTest.Controls.Add(listOfStepControls[i], 0, i); // Adds CustomStep to first column
tableLayoutTest.Controls.Add(listOfRadioControls[i*2], 1, i); // Adds Pass Radio Button to second column
tableLayoutTest.Controls.Add(listOfRadioControls[(i * 2) + 1], 2, i); // Add Fail Raido Button to third column

Counter++; // Increment couter to add subsequent steps underneath the previous ones.

}

}

带控制台读数的应用程序屏幕截图:

点击测试用例并按下单选按钮后(通过单击此按钮,我希望控制台显示为“单击了第 1 次”) Screenshot of App when Steps have been loaded in and Pass radio button has been clicked

控制台读取:

Console Read

点击失败按钮:(我从下面的这张图片知道,因为通过按钮没有保持点击状态,所以我以某种方式对所有 5 个按钮使用相同的 Controller )

Fail Button Pressed

控制台读取

enter image description here

因此,从我遇到的所有这些问题中,我知道我以某种方式对所有 5 个实例使用相同的 Controller ,而不管我将所有内容存储在 Controller 数组中并从那里获取的事实.稍后必须将 for 循环转换为 for each 循环,但这仍然不能解决我的问题。我相信如果我能说这样的话:

RadioButton (pass+id) = new RadioButton(); 

或类似的东西,同时循环动态创建控件的名称,然后每个控件都将是一个完全独立的控件,我可以从那里开始。任何帮助将不胜感激!我来自沉重的网络背景,所以我在 JS 领域解决这个问题的常规技能现在还没有派上用场。再次感谢您的协助。

最佳答案

Name property 是可选的,您不需要指定它,也不需要是唯一的。您可以使用属性 Tag出于您自己的目的(您可以为某些对象分配 ID 或事件实例)。

但是,您也可以创建自己的控件/用户控件来封装整行,并且可以完全按照您的目的声明自己的属性。

关于c# - 使用 WinForms 在 C# 中为 TableLayoutPanel 创建动态 Controller 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com