Здравствуйте!
Подскажите как создать событие, чтоб оповестить главную форму о том, что в Form2 что-то произошло?
Я накопал вот такой способ:
В Program.cs записываем такое:
public delegate void SendMessageEventHandler(string changed, string input);
В Form2:
public static event SendMessageEventHandler SendToPlayListFormEvent;
public PlayListsForm()
{
InitializeComponent();
}
// Пример вызова
private void PlayListBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
SendToPlayListFormEvent(playList[PlayListBox.SelectedIndex][1]);
}
В главную форму:
public MainForm()
{
InitializeComponent();
PlayListsForm.SendToPlayListFormEvent += PlayListsForm_SendToPlayListFormEvent;
}
void PlayListsForm_SendToPlayListFormEvent(string message)
{
// обработка message
}
Это всё были примеры, что в итоге у меня:
Это Program.cs:
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
public delegate void SendMessageEventHandler(string changed, string input);
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
А вот Form2(до главной еще не добрался):
public partial class Form2 : Form
{
public static event SendMessageEventHandler SendMessageForUpdate;//ошибка здесь - не видит делегат
WorkPlaceDB table = null;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
table.PhoneNumberUpdate(textBox2.Text, textBox1.Text);
textBox1.Clear();
textBox2.Clear();
Close();
}
private void Form2_Load(object sender, EventArgs e)
{
table = new WorkPlaceDB();
table.OpenConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename= D:\Lenovo\Documents\Praktika OOP\Praktika\Day4\Database1.mdf;Integrated Security=True");
}
}
Зачем собственно мне это нужно?
- Чтобы при нажатии на кнопку в Form2, отправленные данные для Updat`а БД были отображены в DataGridView. Тоесть мы оповещаем главную форму о том, что данные отправлены, и главная форма обновляет расположеную на ней DataGridView.
Это делается совсем не так. В форме которая редактирует сущность нужно назначить кнопкам след. значения
//устанавливаем роли для кнопок
this.CancelButton = buttonCancel;
this.AcceptButton = buttonOK;
//кнопка ОК отдает нужный результат
buttonOK.Click += (s, e) => this.DialogResult = DialogResult.OK;
А затем в главной форме делаем так
private void ButtonEdit_Click(object sender, EventArgs e)
{
using (var editForm = new EditForm())
{
editForm.Owner = this;
editForm.StartPosition = FormStartPosition.CenterParent;
//выбранный в таблице чел
var selectedPerson = _bsPeople.Current as Person;
//создаем редактируемую копию
editForm.CurrentPerson = new Person
{
Id = selectedPerson.Id,
FirstName = selectedPerson.FirstName,
LastName = selectedPerson.LastName
};
//отображаем форму и ждем результат
editForm.Text = $"Редактирование {selectedPerson.FirstName} {selectedPerson.LastName}";
if (editForm.ShowDialog() == DialogResult.OK)
{
//изменяем данные в БД
Program.Context.UpdatePerson(editForm.CurrentPerson);
//перезагружаем данные в таблицу
LoadData();
}
}
}
Пример целиком можно посмотреть здесь.
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Дело в том что настройки игры, а именно момент когда я хочу сохранить значения PlayerPrefs, и в тестировочном режиме запустить свои наработки, происходит...
новичок в программировании, пытаюсь сделать интро (видео) в игре и после окончания этого видео должно совершиться определенное действие...
Когда я пишу код, Visual Studio сам после } исправляет все скобки с переносом на другую строку