tabcontrol页面上的索引控件问题。

rog_rickert

会员
已加入
2020年12月17日
留言内容
5
编程经验
Beginner
您好,正在寻求有关问题的建议。我正在做的事情,我只是想知道是否有更简单的方法来实现它。在我项目的一个表单上,我有一个带有4个标签页的1-4通道的tabcontrol。每个选项卡页面上都有相同的控件,并用对象列表中的值填充。这是一些缩短的代码,以帮助更好地说明我在做什么:
C#:
//class with fields:
public class ChannelFields
{
    public string apple;
    public string orange;
    public string grape;
}

//   Create List of Channel objects with fields from ChannelFields
public static List<ChannelFields> Channel = new List<ChannelFields>(4)
{
    new ChannelFields(),
    new ChannelFields(),
    new ChannelFields(),
    new ChannelFields(),
};
在每个标签上,说我有3个文本框。导致总计12(txtApple1,txtApple2,txtApple3,txtApple4,txtOrange 1 ....... txtGrape4)

现在,我在每个表单上手动填充文本框,例如:
C#:
txtApple1.text = Channel[0].apple;
txtApple2.text = Channel[1].apple;
// ...
txtGrape4.text = Channel[3].grape;
就像我说的那样有效,但这只是一个简单示例的表示。我的项目中有更多正在使用的字段和控件,因此我希望有一种方法可以通过索引来引用它们。我知道我的控件没有被索引,我只是想说明我想做什么。
C#:
for(int ch =-0; ch<4;ch++)
{
    int tab = ch + 1;
    txtApple[tab].text = Channel[ch].apple;
    txtOrange[tab].text = Channel[ch].orange;
    txtGrape[tab].text = Channel[ch].grape;
}
任何帮助表示赞赏。
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
If you have the same set of controls multiple times then you should be creating a user control first. That user control will encapsulate the group of repeated controls. You can then add an instance of that control to each TabPage. All the controls in the user control would be private and you would expose only what is required. You could provide pass-through properties for the Text of each TextBox and/or provide a method that allows you to pass all the data into the user control in one go and then have it distributed to the appropriate controls internally.
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
而且,我希望每个标签页都是相同的(例如,包含相同类型的用户控件),然后创建一个自定义标签页并实例化该自定义标签页的4个实例。对于每个实例,请从列表中传入特定的ChannelFields实例。然后,每个自定义选项卡页面都应将对该ChannelFields实例的引用传递给用户控件。然后,每个用户控件负责将ChannelFields的属性绑定到用户控件中的控件。
 

rog_rickert

会员
已加入
2020年12月17日
留言内容
5
编程经验
Beginner
感谢您的输入。今天我回到了这个问题,感谢您的建议,它可以正常工作。我对此还有一个问题。在上面列出的相同场景中,我现在有一个选项卡控件,该控件可加载自定义选项卡页,每个选项卡页均包含相同用户控件的实例。如果我想基于选项卡页面1上相同控件的输入来设置选项卡2-4上控件的属性,这可能吗?这仅用于一个控件,并且在第一个选项卡页面上选择的任何内容都需要在其他三个选项卡页面上的相同控件上设置相同的值。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
Of course it's possible. Just use a for loop and set the limits appropriately. If you haven't already, you should have created members in your user control to pass-through the relevant data to the child controls and then corresponding members on the custom TabPage. That way, you only ever have to deal with the TabPage from the outside, which is the point. For instance, if you had givenNameTextBox as a child control, it would be private and you would add this property to the user control:
C#:
public string GivenName
{
    get => givenNameTextBox.Text;
    set => givenNameTextBox.Text = value;
}
You would then add a similar property to the TabPage and pass through that property from the user control. Your form code would then deal only with the GivenName property of the TabPage, which you would have to cast as your custom type.
 
最佳 底部