第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將 ShowDialog() 替換為 Show()

將 ShowDialog() 替換為 Show()

C#
墨色風(fēng)雨 2022-08-20 15:57:41
我有一個(gè)使用ShowDialog()顯示的表單,因此它是一個(gè)模態(tài)窗口。private void OpenForm(object sender, ItemClickEventArgs e){    MyForm testForm = new MyForm();    ...    testForm.Enabled = true;    testForm.ShowDialog(this);    var dialogOk = testForm.DialogOK;    if(dialogOk)    {       //do some stuff 1    }}表單上有一個(gè)“確定”按鈕。單擊“確定”時(shí),對(duì)話(huà)框“為 true”。在 MyForm 類(lèi)中:private void OkClick(object sender, EventArgs e){   // do some stuff 2   ...    DialogOK = true;   Hide();}我需要將其轉(zhuǎn)換為非模式窗口。解決方案似乎是使用Show()而不是ShowDialog(),但是當(dāng)我使用Show()時(shí),代碼不會(huì)停止并等待單擊“確定”按鈕,因此永遠(yuǎn)不會(huì)調(diào)用“做一些事情1”。使用 Show(),我如何在單擊“確定”按鈕后保持“做一些事情 1”的行為?更新:這是我現(xiàn)在正在嘗試的:public partial class MyForm: XtraForm{   public bool DialogOk;   private void OkClick(object sender, EventArgs e)   {      // do some stuff 2      ...       DialogOk = true;      Close();   }}方法 1:public partial class MyMainForm : XtraForm{   private MyForm testForm;   private void OpenForm(object sender, ItemClickEventArgs e)    {        if(testForm == null)        {            testForm = new MyForm();        }        ...        testForm.Enabled = true;        testForm.FormClosed += (s, a) => {            var dialogOk = testForm.DialogOk;            if (dialogOk)            {                // do some stuff 1            }        };        testForm.Show(this);    }}方法 2:public partial class MyMainForm : XtraForm{       private MyForm testForm;       private void OpenForm(object sender, ItemClickEventArgs e)        {            if(testForm == null)            {                testForm = new MyForm();            }            ...            testForm.FormClosed += testForm_Closed;            testForm.Show(this);        }        private void testForm_Closed(object sender, EventArgs args)        {            var testForm = (Form)sender;            testForm.Closed -= testForm_Closed;            if (testForm.DialogResult == DialogResult.OK)            {               // do some stuff 1            }        } }
查看完整描述

4 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以處理以下事件:Form.Closed


MyForm testForm = new MyForm();

testForm.Closed += testForm_Closed;

testForm.Show();


private void testForm_Closed(object sender, EventArgs args)

{

    var testForm = (Form)sender;

    testForm.Closed -= testForm_Closed;


    if (testForm.DialogResult == OK)

        // do some stuff 1

}


查看完整回答
反對(duì) 回復(fù) 2022-08-20
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

最簡(jiǎn)單的方法是將代碼從 移動(dòng)到事件處理程序 。但是,如果由于您可能希望對(duì)不同的任務(wù)使用相同的窗體,因此這不是放置代碼的好地方,則可以為事件添加一個(gè)處理程序,該處理程序在窗體關(guān)閉并運(yùn)行代碼后調(diào)用,例如:OpenFormOkClickFormClosed


private void OpenForm(object sender, ItemClickEventArgs e)

{

    MyForm testForm = new MyForm();

    ...

    testForm.Enabled = true;

    testForm.FormClosed += (s, a) => {

      var dialogOk = testForm.DialogOK;

      if(dialogOk)

      {

         //do some stuff 1

      }

    };

    testForm.Show(this);

}


查看完整回答
反對(duì) 回復(fù) 2022-08-20
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以使用綁定到 TaskCompletionSource 的異步事件處理程序,該處理程序偵聽(tīng)并等待表單的關(guān)閉


private asyc void OpenForm(object sender, ItemClickEventArgs e) {

    var source = new TaskCompletionSource<DialogResult>();


    EventHandler handler = null;

    handler = (s, args) => { 

        var  form = (MyForm)s;

        form.FormClosed -= handler;

        source.SetResult(form.DialogResult);

    }


    var testForm = new MyForm();

    testForm.FormClosed += handler; //subscribe

    //...

    testForm.Enabled = true;

    testForm.Show();


    var dialogOk = await source.Task;

    if(dialogOk == DialogResult.Ok) {

       //do some stuff 1

    }

}

這樣,您就可以將邏輯保留在 中,并允許代碼在不阻塞的情況下等待。OpenForm


在表單中,單擊按鈕時(shí),您需要做的就是設(shè)置對(duì)話(huà)框結(jié)果并關(guān)閉表單。


public partial class MyForm: XtraForm {


    //...


    private void OkClick(object sender, EventArgs e) {

        // do some stuff 2

        // ... 


        DialogResult = DialogResult.Ok;

        Cose();

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-08-20
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

這對(duì)我有用,所以不知道為什么它不適合你(撓頭)......此窗體有兩個(gè)按鈕,一個(gè)按鈕再次打開(kāi)同一窗體,另一個(gè)按鈕關(guān)閉窗體?!案浮贝绑w將事件添加到“已關(guān)閉”事件。


public partial class Form1 : Form

{

    public Form1()

    {

        InitializeComponent();

    }


    private void button1_Click(object sender, EventArgs e)

    {

        Form1 test = new Form1();


        test.FormClosed += Test_FormClosed;


        test.Show();

    }


    private void Test_FormClosed(object sender, FormClosedEventArgs e)

    {

        MessageBox.Show("closed -- do something else here!");

    }


    private void button2_Click(object sender, EventArgs e)

    {

        Close();

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-08-20
  • 4 回答
  • 0 關(guān)注
  • 144 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)