Есть ли способ динамически копировать элементы управления и их обработчики событий в форме? - PullRequest
0 голосов
/ 29 февраля 2012

Итак, вот смысл того, чего я хочу достичь: у меня есть расширенное текстовое поле с именем txtNotes и две кнопки для сохранения или удаления. При нажатии кнопки «Сохранить» текст в расширенном текстовом поле будет сохранен в базе данных (не является проблемой), а ниже появятся новое текстовое поле и кнопки, которые будут действовать так же, как и ранее. Кнопка удаления удалит эти элементы управления из формы и информацию из базы данных. Пользователь должен гипотетически иметь возможность сохранять и создавать неограниченное количество заметок.

Я понятия не имею, возможно ли это или я думаю об этом совершенно неправильно. Если у вас есть какие-то хорошие решения для меня, я был бы очень признателен.

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Кажется, что это может выйти из-под контроля, и это чрезвычайно сложно.

Если у вас есть текстовое поле, позволяющее пользователю вводить текст, и кнопка для сохранения, почему бы не использовать listView или что-то подобное, которое может показать пользователю, что было добавлено в базу данных, а затем позволить им выбирать элементы и удалите их, как они пожелают.

Этот элемент управления будет намного более управляемым и легко прокручиваемым, чтобы принимать «неограниченное» количество записей.

Вам потребуется получить список выбранных элементов в listView для удаления при событии deleteButton_Click, а затем использовать этот список для итеративного удаления всех элементов из вашей базы данных.

Надеюсь, это полезно.

1 голос
/ 29 февраля 2012

Инкапсуляция RTB и кнопок в UserControl кажется хорошим местом для начала.

Затем вы создаете событие TextSaveRequested(Object sender, TextEventArgs e), которое запускается с помощью кнопки сохранения, и просто Dispose() элемент управления, когданажата кнопка удаления (вместе с соответствующей активностью базы данных, возможно, событием TextDeleteRequested).

0 голосов
/ 29 февраля 2012

Попробуйте что-то вроде этого:

public Form1()
{
    InitializeComponent();
    Controls.Add(CreateBox(0, 0));
    AutoScroll = true;
}

Panel CreateBox(int X, int Y)
{
    Panel panel = new Panel();
    panel.Location = new Point(X, Y);
    panel.Size = new Size(100, 150);

    RichTextBox rtb = new RichTextBox();
    panel.Controls.Add(rtb);

    Button b = new Button();
    b.Location = new Point(10, 100);
    b.Tag = rtb;
    b.Click += AllButtons_Click;
    panel.Controls.Add(b);

    return panel;
}

int i = 0;
void AllButtons_Click(object sender, EventArgs e)
{
    ((RichTextBox)((sender as Button).Tag)).Text = "Clicked";
    i += 150;
    Controls.Add(CreateBox(0, i));
}

Хотя я получаю странное поведение от AutoScroll.

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