Попытка использовать функцию другой формы, но не работает - PullRequest
0 голосов
/ 24 мая 2018

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

Вот основная форма:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace Automation_v1_0_0
{
    public partial class FormMain : Form
    {
        bool keysActivated = true;

        public FormMain()
        {
            InitializeComponent();
        }
        public void anotherForm(bool anotherform)
        {
            if (anotherform)
            {
                this.Enabled = false;
                keysActivated = false;
            }
            else
            {
                this.Enabled = true;
                keysActivated = true;
            }
        }

        private void FormMain_KeyDown(object sender, KeyEventArgs e)
        {
            if (keysActivated)
            {
                if (e.KeyCode == Keys.F7)
                {
                    FormSettings settings = new FormSettings();
                    anotherForm(true); // Enters and working.
                    settings .Show();
                }
            }
        }
    }
}

Это моя форма настроек:

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Automation_v1_0_0
{
    public partial class FormAyarlarMenu : Form
    {
        public FormSettings()
        {
            InitializeComponent();
        }
        private void FormSettings_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape || e.KeyCode == Keys.F1)
            {
                FormMain fm = new FormMain();
                fm.anotherForm(false); // Enters but not working.
                this.Close();
            }
        }    
    }
}

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

вы делаете этот комплекс, в то время как он может быть простым

в вашей основной форме, сделайте это:

    private void FormMain_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.F7)
        {
            using (FormSettings settings = new FormSettings())
            {
              settings.ShowDialog();
            }
        }
    }

и просто отбросьте весь другой код, который вам не нужен.
Бросьтеметод другой формы, вам это не нужно.

в форме настроек просто сделайте это

private void FormSettings_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Escape || e.KeyCode == Keys.F1)
    {
        this.Close();
    }
}    
0 голосов
/ 24 мая 2018

Я решил проблему.Вот мой код:

namespace Automation_v1_0_0
{
    public partial class FormMain : Form
    {    
        public FormMain()
        {
            InitializeComponent();
        }

        private void FormMain_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F7)
            {
                FormSettings settings = new FormSettings();
                 settings.ShowDialog();
            } 
        }
    }
}
0 голосов
/ 24 мая 2018

Основная форма:

public partial class FormMain : Form
{
    bool keysActivated = true;

    public FormMain()
    {
        InitializeComponent();
    }

    private void FormMain_KeyDown(object sender, KeyEventArgs e)
    {
        if (keysActivated)
        {
            if (e.KeyCode == Keys.F7)
            {
                this.Hide();
                FormSettings settings = new FormSettings(this);
                settings.Show();
            }
        }
    }
}

Форма настройки:

public partial class FormSettings : Form
{
    private FormMain formMain;

    public FormSettings(FormMain formMain)
    {
        InitializeComponent();
        this.formMain = formMain;
    }

    private void FormSettings_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape || e.KeyCode == Keys.F1)
        {
            this.Close();
            formMain.Show();
        }
    }
}

Ваша проблема в том, что вы создали новый объект FormMain вместо того, чтобы использовать существующий!Решение состоит в том, что вы передаете текущий экземпляр FormMain в форму настройки для его использования.

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