Как мне вызвать общедоступные методы в моем «общедоступном классе» (как модуль С#) в С#?

Здесь есть только (3) вещи, которые мне нужно знать. Во-первых, в этой форме есть только (1) кнопка (close_button). Вот мой код frm_main.cs:

public partial class frm_main : Form
{
    public_class pc = new public_class();
    public frm_main()
    {
        InitializeComponent();
        this.Load += new System.EventHandler(frm_main_Load);
    }
    private void close_button_Click(object sender, EventArgs e)
    {
        this.Close();
    }
    private void frm_main_Load(object sender, EventArgs e)
    {
        pc.screen_adjust(close_button);
    }
}

А вот мой код public_class.cs:

public partial class public_class
{
    public int cl_b;
    public void screen_adjust(Button b)
    {
        cl_b = frm_main.ActiveForm.Width;
        frm_main.ActiveForm.Width = Screen.PrimaryScreen.Bounds.Width;
        frm_main.ActiveForm.Height = Screen.PrimaryScreen.Bounds.Height;
        b.Left += frm_main.ActiveForm.Width - cl_b;
    }
}

Цель этой программы без полей — автоматически растягивать форму на весь экран. Теперь, что я хотел бы узнать, это:

  1. Правильно ли я сделал «модуль VB.net» на С#?
  2. Как мне вызвать методы в public_class.cs без использования 'public_class pc = new public_class();' и 'pc.screen_adjust(close_button);'?
  3. Например, в public_class.cs, если я хочу изменить текст кнопки close_button, как мне это сделать? В конце концов, я не могу сделать frm_main.close_button...

Спасибо!


person Pat-kun Teruel    schedule 11.11.2014    source источник
comment
1. Нет stackoverflow.com/questions/5331695/   -  person Tim Schmelter    schedule 11.11.2014
comment
Вы можете сделать метод статическим (и класс, если все методы помечены как статические). Тогда вы могли бы назвать это public_class.screen_adjust(..)   -  person scheien    schedule 11.11.2014
comment
3. вы передаете кнопку, текст которой хотите изменить. Так что вы можете просто сказать b.Text = "Some other text";   -  person Corak    schedule 11.11.2014
comment
Кстати. похоже, вы не на 100 % понимаете концепцию классов, экземпляры (объекты) и статические классы (вероятно, наиболее близкие к модулям VB).   -  person Corak    schedule 11.11.2014
comment
ах, это число 3 построено с параметром кнопки, чтобы изменить строку конкретной кнопки.. что, если бы у меня было много? поэтому мне нужно сделать что-то вроде (VB.net) frm_main.button1.Text = New Text... но я не знаю, как это сделать на С#   -  person Pat-kun Teruel    schedule 11.11.2014
comment
и, наконец, я забыл, есть еще одна проблема: когда я отлаживаю это и загружаю, оно завершается без ошибок, но перенаправляет меня на мой код public_class.cs   -  person Pat-kun Teruel    schedule 11.11.2014
comment
Это немного сложнее. Но одним из способов было бы передать не кнопку, а весь объект формы. Вы меняете сигнатуру метода на screen_adjust(frm_main form). Затем вы можете изменить все frm_main.ActiveForm внутри на form. Чтобы добраться до кнопки, вы можете попробовать var button = form.Controls.Find("button1", false).FirstOrDefault() as Button;. А потом if (button != null) { button.Text = "New Text"; }. Но тогда вам также нужно изменить frm_main_Load на pc.screen_adjust(this);.   -  person Corak    schedule 11.11.2014
comment
С помощью Controls.Find("button1", false) вы ищете все (прямые) дочерние элементы управления с именем button1. Поскольку button1 был добавлен к frm_main, button1 является дочерним элементом frm_main. Это вернет список, поэтому вам, вероятно, нужен первый или нулевой, если нет элемента управления с таким именем. Это то, что делает .FirstOrDefault(). Возможно, вам придется добавить using System.Linq;, чтобы это сработало. Затем то, что вы получите в ответ, может быть кнопкой, флажком, ярлыком или чем-то еще. Чтобы убедиться, что это кнопка, вы добавляете as Button. Теперь, если это не кнопка, она будет нулевой.   -  person Corak    schedule 11.11.2014
comment
Итак, после этого вы проверяете, является ли он нулевым или нет. Если это не так, у вас есть настоящая кнопка, и вы можете изменить ее свойство Text. - Как я уже сказал, это немного сложно, но, надеюсь, моя попытка объяснить немного поможет.   -  person Corak    schedule 11.11.2014
comment
да, очень помогает, спасибо! но это не моя главная проблема, как я уже сказал, я должен вызвать этот публичный метод в form_load, но он автоматически закрывается...   -  person Pat-kun Teruel    schedule 11.11.2014