Как изменить значение свойства формы из другой формы (formBorderStyle и т. Д.)? C # и окна формы - PullRequest
0 голосов
/ 03 ноября 2018

Это пример кода

Form 1
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            FormBorderStyle = FormBorderStyle.None;
        }

        private void btnAdmin_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show();
        }
}

Форма 1, открытая форма 2 с запросом пароля администратора.

public partial class Form2 : Form
    {

        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if(textBox1.Text == "123")
            {
                Setting frm = new Setting();
                frm.Show();
                this.Close();
            }

            else
            {
                MessageBox.Show("You have entered wrong password.");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

Теперь, если вы ввели правильный пароль, он переходит в форму 3, которая является меню настройки для формы 1.

public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }


        private void btnSave_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1();
            frm.Show();

            if (fullscreenYes.Checked == true)
            {
                frm.FormBorderStyle = FormBorderStyle.None;
            }

            if (fullscreenYes.Checked == false)
            {
                frm.FormBorderStyle = FormBorderStyle.FixedSingle;
            }

            this.Close();
        }
    }

так что теперь я хочу использовать переключатель «Изменить форму» FormBorderStyle формы 1 из формы 3, но он не работает, потому что мой текущий код просто открывает новую форму Form1 и применяет этот параметр к вновь открытой форме 1 и оставляя ранее открытую форму 1 открыт. Я получаю 2 открытые формы 1, как это. Как изменить свойство формы 1 непосредственно из формы 3, не открывая 2 форму 1? Я занимаюсь этим часами, но не могу понять. Помощь.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

быстрый образец:

var frm1 = Application.OpenForms.OfType<Form1>().Single();

//set some stuff
frm1.FormBorderStyle = FormBorderStyle.None;

frm1.Show();
0 голосов
/ 03 ноября 2018

Есть несколько способов достичь своей цели.

# 1 Предоставить доступ к Form3 с помощью доступа к Form1 через его конструктор

private Form1 _owner;
public Form3(Form1 owner)
{
   owner = _owner;
}

void DoSomethingToForm1()
{
    // do something.. _owner.Prop = ?;
}

Затем вызовите Form3 из Form1

new Form3(this).Show();

# 2 Использовать шаблон синглтона

private static object _lockObj = new object();
private static Form1 _instance = new Form1();

public static Form1 Instance 
{
   lock(_lockObj)
   {
      get
      {
         if(_instance == null || _instance.IsDisposed) _instance = new Form1();
         return _instance;
      }
    }
 }

Затем вызовите Form1 из Form3

var f = Form1.Instance;
// do something to form1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...