akosisugar Ответов: 2

C# как получить доступ к свойству формы из другой формы


использование vsstudio (c#)..
учитывая, что приведенный ниже пример кода является моим свойством формы(form1), я хочу использовать его для своего (form2).. пожалуйста, помогите... ТИА..

Что я уже пробовал:

public void frmproperty()
       {
           this.CenterToScreen();
           this.Text = "frmlogin";
           this.MaximizeBox = false;
           this.MinimizeBox = false;
       }

2 Ответов

Рейтинг:
6

OriginalGriff

frmproperty-это метод, и он является общедоступным , поэтому все, что вам нужно, - это экземпляр формы, чтобы вызвать его. И вот в чем загвоздка - как получить экземпляр формы? должны ли вы получить экземпляр формы? Трудно сказать, не зная больше о том, как связаны ваши формы.
Существует три различных сценария:
1) Form1 создает и открывает экземпляр Form2 (Form1 - это "родитель", Form2 - " потомок")
2) Form2 создает и открывает экземпляр Form1 (Form2 - это "родитель", Form1 - " потомок")
3) Form3 создает и открывает как Form1, так и Form2. (Форма 3 - это "родитель", Форма 1 и форма 2 - " дети")

То, как это должно быть обработано, зависит от того, какой сценарий использует ваше программное обеспечение, потому что "дети" не должны знать, что "родители" вообще существуют, не говоря уже о том, что они представляют собой класс и, следовательно, какие свойства и методы они содержат.
Смотрите один из них:
Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]
Они в основном имеют дело со свойствами, но то же самое относится и к методам.

Цитата:
значит, моя идея не может сработать?

В принципе, да-в той форме, в какой вы пытаетесь это сделать, во всяком случае.
Ты пытаешься сделать что-то неправильное. Есть способы сделать то, что вы хотите:
1) Создайте статический метод (или метод расширения) для класса формы и передайте ему экземпляр формы, который вы хотите "настроить" - это будет работать только в том случае, если метод придерживается стандартных свойств и методов формы, он не может делать ничего специфичного для производного класса.
public static class GeneralMethods
   {
   public static void Adjust(Form f)
      {
      f.CenterToScreen();
      f.Text = "frmlogin";
      f.MaximizeBox = false;
      f.MinimizeBox = false;
      }
   }
...
   GeneralMethods.Adjust(this);

2) Создайте базовый класс для всех ваших форм, который содержит метод, и выведите из него свои формы. Базовый метод доступен непосредственно во всех производных формах без какой-либо ссылки на базовый класс.
public class MyForm : From
   {
   public void Adjust()
      {
      CenterToScreen();
      Text = "frmlogin";
      MaximizeBox = false;
      MinimizeBox = false;
      }
   }
...
public class Form1 : MyForm
   {
   ...
      Adjust();
   ...
   }
public class Form2 : MyForm
   {
   ...
      Adjust();
   ...
   }
На самом деле моя форма была бы abstract форма, но это создает проблемы с дизайнером Visual studio, так что на данный момент просто оставьте все как есть!


akosisugar

это просто вызов метода 'frmproperty' в мою форму 2. но он не сработал..

OriginalGriff

Конечно, это не так - это метод Form1, поэтому он действует на экземпляры Form1, он даже не знает о существовании Form2, не говоря уже о том, какими свойствами он обладает!

akosisugar

значит, моя идея не может сработать?

OriginalGriff

Ответ обновлен

akosisugar

могу ли я использовать метод вместо класса?
некоторые свойства формы не работают..

OriginalGriff

Нет, класс содержит методы, а не наоборот.
Попробуйте использовать метод base + derived class, если вам нужны свойства, которые не являются частью стандартного класса Form.

akosisugar

ну ладно, сэр... спасибо Вам за эту идею..

OriginalGriff

Пожалуйста!

Рейтинг:
2

Ralf Meier

Это не свойство (конечно, оно принадлежит форме) - это метод.
Если вы хотите получить доступ к чему-то на Form1 из Form2, вы должны создать ссылку на Form1.

Например :http://stackoverflow.com/questions/20286176/how-to-call-function-from-another-form


akosisugar

Да, сэр ... метод называется "frmproperty". я вызываю этот метод в form2 в событии form_load.. но это не сработало..

Ralf Meier

Смотрите ссылку, которую я разместил, а также ссылки в тогдашнем 2-м решении от OG ...

akosisugar

frmmain_Load частная недействительным(объект отправителя, EventArgs в электронной)
{
Форма form1 Ф = новый файл form1();

Ф.frmproperty();
}

код в моей форме2

Ralf Meier

Ладно ... а теперь ? Что же происходит ? Это то, что ты хочешь получить ?

akosisugar

свойство form1 не копировалось в form2

Ralf Meier

Метод из формы 1 не может быть скопирован в форму 2.
У вас есть следующие возможности :
- Вы могли бы получить (если это свойство) его результат.
- Вы могли бы это сделать, если бы он не был пустым.
И
- Вы могли бы выполнить его, если это метод ...

Но...
чего вы пытаетесь достичь ?