объявить форму делегатом - PullRequest
0 голосов
/ 08 апреля 2011

В моей программе 4 формы:

  • StartForm
  • UIForm1
  • UIForm2
  • DebugForm

Я запускаю программу с помощью StartForm, затем пользователь может использовать кнопки для запуска UIForm1 и 2. Есть также другая форма, называемая DebugForm, в которой есть textBox, и я помещаю все ошибки во время использования UIForm1 и 2 внутри (Исключения и и т.д ..).

Нет. Я хочу объявить DebugForm в StartForm, чтобы UIForm1 и 2 могли получить к нему доступ. Как мне это сделать? Я пытался объявить его общедоступным, но к нему нельзя получить доступ:

//in StartForm
public DebugForm dFrm = new DebugForm(); //Not working

//in UIForm1 or 2
//add a error to textbox
dFrm.textBox.Text += "ERROR NUMBER 1"; //Not working
dFrm.Show(); //Not working

Я подозреваю, что мне нужно как-то сделать это с помощью ключевого слова делегата. Как можно будет это сделать?

Ответы [ 4 ]

1 голос
/ 08 апреля 2011

Чистый способ сделать это, не подвергая StartForm UIForms1, 2, - это изменить конструктор UIForm1 и 2. для выполнения действия.

private Action<string> _showDebugForm;
public UIForm1(Action<string> showDebugForm)
{
 _showDebugForm = showDebugForm
}

и вызвать

 if(_showDebugForm!=null)
 {
     _showDebugForm("ERROR NUMBER 1");
 }

в UIForm1

А когда вы создаете UIForm1, 2 делаете что-то вроде этого

new UIForm1(str =>
{
    dFrm.textBox.Text += str;
    dFrm.Show();
 });
1 голос
/ 08 апреля 2011

Быстрым решением было бы объявить переменную DebugForm в StartForm как:

//in StartForm
public static DebugForm dFrm = new DebugForm();

И используйте его в других формах как:

StartForm.dFrm.textBox.Text += "ERROR NUMBER 1";
StartForm.dFrm.Show();
0 голосов
/ 08 апреля 2011

Объявите публичную собственность в StartForm, которая обеспечивает доступ к DebugForm

public class MainForm
{
    private DebugForm debugForm = new DebugForm();

    public DebugForm DebugForm
    {
        get { return this.debugForm; }
    }        
}

Затем вы можете получить доступ к DebugForm через StartForm.DebugForm

startForm.DebugForm.Show();
startForm.DebugForm.TextBox.Text += "Error";
0 голосов
/ 08 апреля 2011

Делегат - это «указатель» на метод, поэтому он представляет функцию, которой он назначается, или несколько методов.Его нельзя использовать для представления объекта.

Почему бы вам не создать коллекцию со строковыми объектами (списком) в ней, а затем при создании формы отладки вы можете очистить ее в текстовом поле.

Вы создаете коллекцию в mainForm и передаете ее в формы UI1 & 2.Затем, когда вы создаете DebugForm, вы можете передать его туда и делать все, что захотите.

В каждой форме вы можете создать свойство, которому вы можете назначить эту коллекцию.

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