【问题标题】:How do you set a control's modifier at runtime?如何在运行时设置控件的修饰符?
【发布时间】:2013-01-25 12:49:03
【问题描述】:
private void referenceDesk_DoubleClick(object sender, EventArgs e)
{
    tabControl1.TabPages.Add(new TabPage("Donkey Kong"));
}

没有tabControl1.Modifier类型的命令可以用,也不能用

new public TabPage("");

【问题讨论】:

  • 你想达到什么目的?
  • tabControl1 已设置为公共我希望添加的任何页面 tControl1.TabPages[index] 也设置为公共
  • tabControl1 是用表单设计器创建的,您想更改其修饰符吗?
  • 不,它是由设计师创建的,并且已经设置为具有公共修饰符。新的 TabPages 被添加到其中,并且默认是私有的,就像所有其他控件一样。如何更改运行时添加的 TabPages 上的设置?

标签: c# winforms access-modifiers design-time


【解决方案1】:

设计器代码不应由用户修改,因为每次您在设计器中更改表单时,Visual Studio 都会重新编写它(正如您所发现的那样)。

一种将控件声明和初始化移至非设计器代码文件的方法。但是,这意味着您的控件将不再出现在设计器中。

【讨论】:

  • 离题。添加了一些控件,需要设置 public 修饰符,如何在新添加的 TabPages 上实现?
【解决方案2】:

Modifiers 设计时属性控制您正在修改的对象的成员创建。这不是您以后可以更改的。如果您想将选项卡页添加到选项卡控件并且希望以后能够更改它们,请为它们定义类成员并为它们分配适当的访问修饰符:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private List<TabPage> tabPages;

    private void referenceDesk_DoubleClick(object sender, EventArgs e)
    {
        tabPages = new List<TabPage>();
        tabPages.Add(new TabPage("First"));
        tabPages.Add(new TabPage("Second"));
        foreach (var tab in tabPages)
            tabControl1.TabPages.Add(tab);
    }

    ....
}

【讨论】:

  • 必须以 List 格式完成吗?这甚至可能吗?
  • 可能必须使用动态关键字?这是无限数量的页面..所以它们需要在运行时创建。 @MD.Unicorn 私有 List tabPages 将私有应用于每个页面?
  • 它是动态的。您可以将任意数量的页面添加到列表和选项卡控件。访问修饰符控制从类外部类成员的访问。现在类成员是tabPages 本身。您需要阅读一些有关面向对象编程和 C# 的书籍。
猜你喜欢
  • 2013-03-24
  • 2023-03-10
  • 2015-03-15
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多