Ссылка на вновь созданный элемент управления - PullRequest
0 голосов
/ 17 июля 2009

Если я создаю элемент управления на лету, как показано ниже

private void button10_Click(object sender, EventArgs e)
{
    CheckedListBox CheckedListBox1 = new CheckedListBox();
    CheckedListBox1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(224)), ((System.Byte)(192)));
    CheckedListBox1.ItemHeight = 16;
    CheckedListBox1.Location = new System.Drawing.Point(12, 313);
    CheckedListBox1.Name = "CheckedListBox1";
    CheckedListBox1.Size = new System.Drawing.Size(168, 244);
    CheckedListBox1.TabIndex = 0;
    Controls.Add(CheckedListBox1);

    Button button12 = new Button();
    button12.Location = new Point(900, 500);
    button12.Size = new Size(75, 23);
    button12.Click += new System.EventHandler(button12_Click);
    button12.Name = "button12";
    button12.Text = "Toggle All";
    Controls.Add(button12);
}

каков наилучший способ ссылки на этот элемент управления из функции вне локальной области видимости? было бы лучше создать статический класс для хранения ссылки на элемент управления, к которому можно получить доступ за пределами локальной области видимости, или есть функция findcontrol для winforms (я думаю, findcontrol предназначен только для сети).

я хочу

private void button12_Click(object sender, EventArgs e)
{
    for (int i = 0; i <= (CheckedListBox1.Items.Count - 1); i++)
    {
        if (CheckedListBox1.GetItemCheckState(i) == CheckState.Checked)
        {
            CheckedListBox1.SetItemCheckState(i, CheckState.Indeterminate);
        }
        else if (CheckedListBox1.GetItemCheckState(i) == CheckState.Indeterminate)
        {
            CheckedListBox1.SetItemCheckState(i, CheckState.Checked);
        }
    }
}

чтобы иметь возможность работать, но я ошибаюсь из-за объема? Пожалуйста, помогите новичку

спасибо

Ответы [ 3 ]

1 голос
/ 17 июля 2009

Я предполагаю, что две функции button12_Click и button10_Click являются членами класса From. В этом случае вы должны сделать ваши CheckListBox1 и button12 членами класса From. Таким образом, button12_Click сможет ссылаться на созданные вами элементы управления.

 public partial class Form1 : Form
 {
      CheckedListBox CheckedListBox1 = null;
      Button button12 = null;


      private void button10_Click(object sender, EventArgs e) 
      {
        CheckedListBox1 = new CheckedListBox();
        CheckedListBox1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(224)), ((System.Byte)(192)));
        CheckedListBox1.ItemHeight = 16;
        CheckedListBox1.Location = new System.Drawing.Point(12, 313);
        CheckedListBox1.Name = "CheckedListBox1";
        CheckedListBox1.Size = new System.Drawing.Size(168, 244);
        CheckedListBox1.TabIndex = 0;
        Controls.Add(CheckedListBox1);

        button12 = new Button();
        button12.Location = new Point(900, 500);
        button12.Size = new Size(75, 23);
        button12.Click += new System.EventHandler(button12_Click);
        button12.Name = "button12";
        button12.Text = "Toggle All";
        Controls.Add(button12);
    }

    private void button12_Click(object sender, EventArgs e)
    {
        for (int i = 0; i <= (CheckedListBox1.Items.Count - 1); i++)
        {
            if (CheckedListBox1.GetItemCheckState(i) == CheckState.Checked)
            {
                CheckedListBox1.SetItemCheckState(i, CheckState.Indeterminate);
            }
            else if (CheckedListBox1.GetItemCheckState(i) == CheckState.Indeterminate)
            {
                CheckedListBox1.SetItemCheckState(i, CheckState.Checked);
            }
        }
    }

 }
0 голосов
/ 17 июля 2009

Если вы добавляете элементы управления в коллекцию элементов управления страницы, просто зайдите туда. Если вы знаете индекс элемента управления, вы можете ссылаться на него таким образом. если вы добавляете элемент управления в коллекцию элемента управления какого-либо контейнера (скажем, панель), найдите его там

0 голосов
/ 17 июля 2009

Когда есть только один CheckedListBox, сделайте его переменной класса. Но когда у вас всегда есть только один CheckedListBox - почему вы создаете его динамически?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...