Проблема с установкой текста метки в другой форме - PullRequest
2 голосов
/ 02 декабря 2008

Я пытаюсь сделать приложение Kiosk более доступным за счет увеличения размера шрифтов.
Нет проблем в основной форме.
У меня возникла проблема с заменой MessageBoxes (для которого, как мне кажется, нет способа увеличить размер шрифта) на маленькие формы с тем же сообщением.

Здесь я сталкиваюсь с проблемой. Основная форма не может см. форму ошибки и ее метку для установки текста. Я попытался установить свойство для личной метки в форме ошибки, но оно все еще не работает.

Буду очень признателен за любую помощь. Я пытался применить то, чему научился, читая несколько веток из разных источников C #.

Я заметил две странные вещи:

  1. В MainForm, когда я набираю ErrorForm, выскакивает список предлагаемого кода Intellisense, но переменная LblNotCheckedInBecause не появляется в списке.
  2. Ошибка компилятора что-то говорит об операторе LBlNotCheckedInBecause .get, и мне кажется, что он должен ссылаться на оператор set, поскольку я пытаюсь установить это значение.

Вот части кода, которые, я считаю, задействованы:

С ErrorForm.Designer.cs:

private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label lblNotCheckedInBecause;

// property I created to try to be able to change the label
public string LblNotCheckedInBecause  
{
    get { return this.lblNotCheckedInBecause.Text; }
    set { this.lblNotCheckedInBecause.Text = value; }
}

С MainForm.cs:

// this is what I'm trying to replace
MessageBox.Show("You were not checked in because of the following reasons:" + sErrors);

// this line is causing a compiler error
ErrorForm.LblNotCheckInBecause = "You were not checked in because of the following reasons:" + sErrors; 

Ошибка компилятора:

Ошибка 1 Ссылка на объект требуется для нестатического поля, метод или свойство 'LogisticsKiosk.ErrorForm.LblNotCheckInBecause.get' C: \ Documents and Настройки \ Мои документы \ Visual Studio 2005 \ Проекты \ Логистический киоск \ Формы \ MainForm.cs 107 17 Логистический киоск

Ответы [ 5 ]

4 голосов
/ 02 декабря 2008

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

Где-то в вашем приложении вы создали новую ErrorForm. Вам нужно взять эту переменную и установить для нее свойство LblNotCheckedInBecause.

Ищите код, подобный этому;

ErrorForm errorFrm = new ErrorForm();
errorFrm.Show();

Тогда вы можете сделать это, если у вас есть ссылка на эту переменную;

errorFrm.LblNotCheckedInBecause = "Some Reason";

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

// Doesn't work
ErrorForm.LblNotCheckedInBecause = "Some Reason";
2 голосов
/ 03 декабря 2008

Еще одна вещь, о которой следует помнить: Вы упомянули, что редактировали код в: ErrorForm.Designer.cs.

Я бы предложил поместить ваш добавленный код в ErrorForm.cs. Компилятору нравится думать, что он обладает исключительными правами на XXXXXX.Designer.cs и, как известно, отклоняет изменения, когда он автоматически редактирует файл.

1 голос
/ 02 декабря 2008

Спасибо всем за помощь. После создания формы я смог заставить работать код. Интересно, что Intellisense потребовалось несколько минут, чтобы догнать.

1 голос
/ 02 декабря 2008

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

ErrorForm ef = new ErrorForm();
ef.LblNotCheckedInBecause   = "Your error text";
ef.Show();
0 голосов
/ 03 декабря 2008

Следует всегда помнить о том, как легко другому разработчику прочитать ваш код и понять. Лучший вариант, который я вижу, это

ErrorForm form = new ErrorForm (); form.SetErrorLableMessageTo ("Текст ошибки"); form.Show ();

это очень читабельно. Передача аргументов в конструкторе не показывает намерение, пока мы не посмотрим, что происходит в конструкторе. Плюс не во всех случаях, когда вы захотите это сделать, и если вы выберете путь конструктора, вы будете связаны (не гибкий дизайн).

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