Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > обращение к кнопкам!


Автор: retto 17.3.2008, 16:49
При загрузке формы создаются кнопки (кол-во зависит от того сколько хочет пользователь):
Код

  for (int j = 1; j < Ryad + 1; j++)
                {
                    System.Windows.Forms.Button nB = new Button();
                    nB.ForeColor = Color.White;
                    nB.Top = Xkoor + 10;
                    nB.Left = Ykoor + 10;
                    nB.Height = 30;
                    nB.Width = 30;
                    nB.Text = j.ToString();
                    nB.Name = i.ToString();
                    nB.Font = f;
                    nB.BackColor = Color.Red;
                    this.Controls.Add(nB);
                    nB.MouseDown += new MouseEventHandler(bt_mouseDown);
                    nB.MouseMove += new MouseEventHandler(bt_mouseMove);
                    nB.MouseUp += new MouseEventHandler(bt_mouseUp);
                    nB.MouseEnter += new EventHandler(bt_mouseEnter);
                    nB.MouseLeave += new EventHandler(bt_mouseLeave);
                    Ykoor += 30;
                }


После нужно сохранить координаты всех добавленных в цикле кнопок. Как это сделать? Видь на прямую нельзя обратится к созданой кнопке

Автор: _hunter 17.3.2008, 16:55
Цитата(retto @  17.3.2008,  15:49 Найти цитируемый пост)
Как это сделать?

взять и сохранить их...

Цитата(retto @  17.3.2008,  15:49 Найти цитируемый пост)
Видь на прямую нельзя обратится к созданой кнопке 

как это нельзя? -- а это:

Цитата(retto @  17.3.2008,  15:49 Найти цитируемый пост)
                   nB.ForeColor = Color.White;
                    nB.Top = Xkoor + 10;
                    nB.Left = Ykoor + 10;

что по-твоему? -- самое натуральное обращение...

Автор: retto 17.3.2008, 17:04
_hunter,  это обращение можно вызвать только при вызове какогото события, например при нажатии:

Код

 private void bt_mouseDown(object sender, EventArgs e)
        {
            Button bv = new Button();
            bv = (Button)sender;
            switch (EditZaL)
            {
                case 1:
                    if (k == false)
                    {
                        p = new Point(Cursor.Position.X, Cursor.Position.Y);

                        k = true;
                    }
                    else
                    {
                        k = false;
                        this.Cursor = Cursors.Default;
                    }
                    break;
                case 2:
                    

                    break;
                case 3:
                    bv.Dispose();
                    this.Cursor = Cursors.Default;
                    break;
            }
        }


и при этом пользователь может перемещать кнопки по форме пока ему не надоест. И после этого ему надо сохранить координаты каждой кнопки!! ему что на каждую кнопку наводить чтоли?


Решил эту "проблему" вот так:
for (int i = 1; i < Controls.Count; i++)
            {
                richTextBox1.AppendText(Controls[i].Name.ToString() + " " 
                    + Controls[i].Location.X.ToString() + " " 
                    + Controls[i].Location.Y.ToString()+"\n");
            }

Автор: Rififi 17.3.2008, 21:15
только я один ничего не понял?

ps.
Код

          Button bv = new Button();
            bv = (Button)sender;
...
                    bv.Dispose();


мрак smile

Автор: vponomarov 17.3.2008, 22:19
 smile  smile 
Rififi, чувак все правильно делает! Везде же пишут, что хорошей практикой является инициализация переменных в момент их объявления. Вот человек так и поступает. smile 
хотя наверное не стоит стебаться над чужим кодом, это не этично...

Автор: _hunter 18.3.2008, 12:21
Цитата(vponomarov @  17.3.2008,  21:19 Найти цитируемый пост)
 Везде же пишут, что хорошей практикой является инициализация переменных в момент их объявления. 

так это не инициализация. это "потеря" указателя -- создаем объект и потом на него забиваем (и работаем с другим объектом)...

Автор: vponomarov 18.3.2008, 12:47
Цитата

так это не инициализация. это "потеря" указателя -- создаем объект и потом на него забиваем (и работаем с другим объектом)... 

я понимаю. это был сарказм smile 

Автор: retto 20.3.2008, 09:56
Цитата(Rififi @ 17.3.2008,  21:15)
только я один ничего не понял?

ps.
Код

          Button bv = new Button();
            bv = (Button)sender;
...
                    bv.Dispose();


мрак smile

ну и что здесь непонятного? Если так, то скажи как мне обратиться к созданой кнопке?
Если есть другой нормальный способ, скажи какой.
А  bv.Dispose(); это чтобы пользователь мог убить кнопку (это такая программа)))

Автор: vponomarov 20.3.2008, 10:46
Цитата

ну и что здесь непонятного? Если так, то скажи как мне обратиться к созданой кнопке?

тут пытались сказать, что последовательность строк кода:
Код

Button bv = new Button();
            bv = (Button)sender;

лишина смысла т.к. первая строка говорит о том, что нужно создать новую кнопку, а вторая тут же заменяет ее уже существующей (на которую кликнули) и в итоге указатель на новую теряется и ты с ней уже ничего не сделаешь:(
короче, первую строчку нужно удалить smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)