0

基本的に; Form1には2つのボタンがあり、Form2には1つのボタンがあります。Form2のボタンをクリックすると、Form1でクリックしたボタンがチェックされ、(Form1で)クリックしたボタンに応じてForm3またはForm4が開きます。


そこで、フォーム間で変数を渡す最初の方法であるMarkHallsを利用しました。さて、私のクローズドリファインメントの後半です。

Form1

private void btnLogin_Click(object sender, EventArgs e)
        {
            // Call function while storing variable info.
            Account("login");
        }

        private void btnRegister_Click(object sender, EventArgs e)
        {
            // Call function while storing variable info.
            Account("register");
        }

        // Function used to pass Variable info to Account form while opening it as instance.
        private void Account(string formtype)
        {
            // Generate/Name new instant of form.
            frontend_account frmAcc = new frontend_account();
            // Pass variable to instance.
            frmAcc.CheckButtonClick = formtype;
            // Show form instance.
            frmAcc.Show(this);
            // Hide this instance.
            this.Hide();
        }

Form2

// String Variable to store value from Login.
        public string CheckButtonClick { get; set; }

        private void btnContinue_Click(object sender, EventArgs e)
        {
            // If statement to open either Main form or Registration form, based on Login variable.
            if (CheckButtonClick == "login")
            {
                // Generate/Name new instant of form.
                frontend_main frmMain = new frontend_main();
                // Show form instant.
                frmMain.Show();
                // Close this instant.
                this.Close();
            }
            else if (CheckButtonClick == "register")
            {
                // Generate/Name new instant of form.
                frontend_register frmReg = new frontend_register();
                //  Show form instant.
                frmReg.Show();
                // Close this instant.
                this.Close();
            }
        }

Form2には2つのラジオボタンがありますが、フォームを開いたときにタブコントロールのフォーカスを設定するためにそのコードを熟知できますか?すなわち。radClientがチェックされている場合はwinformを開いた後にタブコントロールにフォーカスを設定します。そうでない場合はradStudentがチェックされている場合はwinformを開いた後にタブコントロール(他のページ)にフォーカスを設定します...そしてラジオがチェックされていない場合はwinformを開かないでしょう。

これが焦点になると思います。

// Sets focus to first tab.
tabRegister.SelectedTab = tabRegister.TabPages[0];
// Sets focus to second tab.
tabRegister.SelectedTab = tabRegister.TabPages[1];
4

2 に答える 2

0

コメントで提案したように、フォーム間でデータを渡すための最良の方法の1つは、イベントを使用することです。

基本的に、「子」フォームでは、「メイン」フォームによって処理またはリッスンされるイベントを宣言します。

私のコメントから参照された回答を参照してください。それを適応させる方法について具体的な質問がある場合は、遠慮なく質問してください。

乾杯

于 2012-10-20T02:16:37.497 に答える
0

あなたの例では、私が最初に目にする問題は、Form1を閉じてForm2を破棄する親フォームを閉じていることです。私が行うことは、Form1を閉じる代わりに非表示にすることです。次に、Form2にパブリックプロパティを作成して、選択されたボタン。しかし、複数のフォームを開いたり閉じたりするときはいつでも面倒になる可能性があります。私が行うことは、追加のフォーム用のUserControlを作成し、それらをPanelで交換することです。最初の例は、あなたが求めた方法でそれを行う方法です。

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

    private void btnLogin_Click(object sender, EventArgs e)
    {
        ShowForm2("login");
    }

    private void btnRegister_Click(object sender, EventArgs e)
    {
        ShowForm2("register");
    } 


    private void ShowForm2(string formtype)
    {
        Form2 f2 = new Form2(); // Instantiate a Form2 object.
        f2.CheckButtonClick = formtype;
        f2.Show(this); // Show Form2 and  
        this.Hide(); // closes the Form1 instance.  

    }
}

Form2

ublic partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public string CheckButtonClick { get; set; }

    private void button1_Click(object sender, EventArgs e)
    {
        if (CheckButtonClick == "login")
        {
            Form3 f3 = new Form3(); // Instantiate a Form3 object.  
            f3.Show(); // Show Form3 and  
            this.Close(); // closes the Form2 instance.  
        }
        else if (CheckButtonClick == "register")
        {
            Form4 f4 = new Form4(); // Instantiate a Form4 object.  
            f4.Show(); // Show Form4 and  
            this.Close(); // closes the Form2 instance.  
        } 

    }
}

Form3とForm4は、Form1がこれらのフォームに長い間忘れられているため、バックアップを開くために検索します。

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

    private void Form3_FormClosed(object sender, FormClosedEventArgs e)
    {
        FormCollection frms = Application.OpenForms;
        foreach (Form f in frms)
        {
            if (f.Name == "Form1")
            {
                f.Show();
                break;
            }
        }
    }
}

UserControlsの2番目のオプションには、パネルが付いた1つのフォームがあります。イベントを使用して、フォームにコントロールの変更とUserControl2のパブリックプロパティを通知します

public partial class Form1 : Form
{
    string logonType;
    public Form1()
    {
        InitializeComponent();
    }

    private void userControl1_LoginOrRegisterEvent(object sender, LoginOrRegisterArgs e)
    {
        logonType = e.Value;
        userControl2.BringToFront();
    }


    private void userControl2_ControlFinshedEvent(object sender, EventArgs e)
    {
        if (logonType == "logon")
            userControl3.BringToFront();
        else if (logonType == "register")
            userControl4.BringToFront();
    }

    private void userControl3_ControlFinshedEvent(object sender, EventArgs e)
    {
        userControl1.BringToFront();
    }

    private void userControl4_ControlFinshedEvent(object sender, EventArgs e)
    {
        userControl1.BringToFront();
    }
}

UserControl1

public partial class UserControl1 : UserControl
{
   public delegate void LoginOrRegisterHandler(object sender, LoginOrRegisterArgs e);
   public event LoginOrRegisterHandler LoginOrRegisterEvent;

    public UserControl1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        LoginOrRegisterArgs ea = new LoginOrRegisterArgs("logon");
        LoginOrRegisterEvent(sender, ea);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        LoginOrRegisterArgs ea = new LoginOrRegisterArgs("register");
        LoginOrRegisterEvent(sender, ea);
    }
}

public class LoginOrRegisterArgs
{
    public LoginOrRegisterArgs(string s) {Value = s;}
    public string Value {get; private set;}
}

UserControl2

public partial class UserControl2 : UserControl
{
    public delegate void ControlFinishedHandler(object sender, EventArgs e);
    public event ControlFinishedHandler ControlFinshedEvent;
    public UserControl2()
    {
        InitializeComponent();
    }
    public string SetLogonType { get; set; }

    private void button1_Click(object sender, EventArgs e)
    {
        ControlFinshedEvent(sender, new EventArgs());
    }
}

UserControl3とUserControl4は、クラス名が異なることを除いてまったく同じです。

public partial class UserControl3 : UserControl
{
    public delegate void ControlFinishedHandler(object sender, EventArgs e);
    public event ControlFinishedHandler ControlFinshedEvent;
    public UserControl3()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ControlFinshedEvent(sender, new EventArgs());
    }
}
于 2012-10-20T03:38:53.957 に答える