У меня есть приложение C#, которое позволяет пользователю регистрировать определенные события, которые происходят в игре. Для простоты я назову их ParentForm
и ChildForm
.C# Конкретное значение, передаваемое между формами без нового экземпляра
ParentForm
используется 99% времени, чтобы регистрировать общие события. Это представлено как пользователь, нажимая PictureBox
и свойство Tag
того, что PictureBox
добавлено в ListBox
. Когда происходит «редкое» событие, пользователь может нажать кнопку «log редкое событие» на ParentForm
, чтобы открыть ChildForm
, который открывает набор «редких событий» PictureBoxes
, которые функционируют так же, как и в ParentForm
. Задача состоит в том, что я хочу, чтобы эти общие и редкие события, которые будут записываться в тот же ListBox
, так что я пытаюсь выяснить, как я хотел бы получить PictureBox
щелчок (и последующее Tag
от этого PictureBox
) на ChildForm
к ListBox
на ParentForm ,
ParentForm
не делает не закрыт пока ChildForm
открыт и должен оставаться открытым.
В ParentForm
коды, у меня уже есть код, необходимый для захвата одного из PictureBox
щелчков и захватывая Tag
, а также обработка дела с добавлением к ListBox
, так что было бы хорошо, если бы я мог просто использовать эти.
Вот что я пытался до сих пор для Родитель:
// This file is EventLogger.cs
using rareEvent;
namespace mainWindow {
public partial class EventLogger : Form {
// In the ParentForm (listeners for PictureBox clicks are handled elsewhere)
public void pictureBox_Click(object sender, EventArgs e) {
PictureBox pbSender = (PictureBox) sender;
// Open new window and handle "rare" drops
if (pbSender.Tag.ToString() == "rare") {
// Open rare form
EventLogger.RareForm rare = new EventLogger.RareForm();
rare.Show();
}
}
}
}
и вот ребенок:
// This file is Rare.cs
using EventLogger;
namespace rareEvent {
public partial class rareEventForm : Form {
// In the ChildForm
private void pictureBox_Click(object sender, EventArgs e) {
// Does not compile if form is not instantiated, but I do not
// want a new instance
EventLogger form;
form.pictureBox_Click(sender, e);
}
}
}
я понял, что-то вроде этого будет работать, но он дает ошибку
The type or namespace name 'EventLogger' does not exist in the namespace
'mainWindow' (are you missing an assembly reference?)
Любая помощь будет высоко оценена. Все остальные примеры, которые я нашел в передаче значений между формами, как представляется, создают новые экземпляры, которые мне не нужны, или мне было 8 лет, и они не работали.
Цените это!
Редактировать: Код обновлен для того, чтобы иметь using <namespace>
в каждом файле. Проблема по-прежнему заключается в невозможности отправки значений между обеими формами без с использованием new
. (См. Комментарий к this ответ)
Вы должны передать аргументы между двумя формами, используя экземпляры, но вам не нужно закрывать экземпляры. См. Проект в двух формах при следующей публикации. Многие люди используют этот код, который я разработал более 5 лет назад. Другие эксперты также рекомендовали мой код: https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx. Я буду рад ответить на любые дополнительные вопросы. – jdweng
Не уверен, что вы связали правильную вещь - эта ссылка идет на сокеты, и ничего не сказано о «проекте с двумя формами» – Sej
Ваш правильный. Ссылка была ответом для другой публикации в TCP. Вот правильная ссылка: http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng