首頁 後端開發 C#.Net教程 WinForm開發,窗體顯示與窗體傳值

WinForm開發,窗體顯示與窗體傳值

Dec 20, 2016 pm 03:10 PM

以前對WinForm窗體顯示和窗體間傳值了解不是很清楚
最近做了一些WinForm開發,把用到的相關知識整理如下

A.WinForm中窗體顯示
顯示窗體可以有以下2種方法:
Form.ShowDialog方法(窗體顯示為模式窗體)
Form.Show方法(窗體顯示為無模式窗體)

2者俱體差異如下:
1.在呼叫Form.Show方法後呼叫Form.Show方法後,Show方法後面的程式碼會立即執行
2.在呼叫Form.ShowDialog方法後,直到關閉對話框後,才執行此方法後面的程式碼
3.當窗體顯示為模式窗體時,按一下「關閉」按鈕會隱藏窗體,並將DialogResult屬性設為DialogResult.Cancel
  與無模式窗體不同,當使用者點選對話方塊的關閉窗體按鈕或設定DialogResult屬性的值時,不呼叫窗體的Close方法
  實際上是把窗體的Visible屬性賦值為false,隱藏窗體了
  這樣隱藏的窗體是可以重新顯示,而不用創建該對話框的新實例
  因為未關閉窗體,所以在應用程序不再需要該窗體時,請呼叫該窗體的Dispose方法

怎麼判斷一個窗體是模式窗體呢?
利用Form.Modal屬性,如果該窗體是模式顯示,則為true,否則為false
根據透過Show和ShowDialog而顯示出來的窗體的Modal屬性分別對應false和true
特別注意:
由於在窗體創建之前是無法得知顯示方式的,所以在窗體構造函數中,Modal屬性總是對應false,所以我們只能在Load事件中或者之後利用Modal屬性值

怎麼確定窗體間的所有者關係?
Form類別的Owner屬性:窗體的擁有者
當一個窗體歸另一窗體所有時,它便隨著所有者窗體最小化和關閉。
例如,如果Form2歸窗體Form1所有,則關閉或最小化Form1時,Form2也會關閉或最小化。

例如在窗體Form1中
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); 
//或 
f2.Show ( this );thisf//或是.ShowDialog( );

這樣f2的所有者就是Form1

B.WinForm窗體傳值

了解了窗體的顯示相關知識,接著總結一下窗體的傳值方法:

1.透過構造函數
特性:傳值是單向的(不可以互相傳值),實作簡單

實作碼如下:

在窗體Form2中       
int value1;
string value2;

public Form2 ( {
    InitializeComponent ( );

    this.value1 = value1;
    this.value2 = value2;}

.  //這樣就把111,"222",這2個值傳送給了Form2


2.透過靜態變數
特點:傳值是雙向的,實現簡單

實作程式碼如下:

在一個app類別中定義一個靜態成員value
public class app

{

  public static string value;
}

在窗體Form1中這樣呼叫 
app.value = "f2";    顯示Form2

在窗體Form2中      
this.Text = app.value;  //取回app.value的值

app.value = "Form2";    //為app.value賦值,以便其他表單。

3.透過表單的公有屬性值
特性:實作簡單
實作程式碼如下:

在窗體Form2中定義一個公有屬性Form2Value,取得並設定textBox1的文字值
public  
        return this.textBox1.Text;

    }

    set
    {
    1中這樣呼叫 

Form2 f2 = new Form2 ( );

f2.Form2Value = "Ok";     //給Form2的textBox1賦值Ok
f2.ShowDialog (  );

4.透過窗體的公有屬性值與Owner屬性(建議使用)
特性:實現簡單,靈活
實作程式碼如下:
實作程式碼在窗體Form1中
public int Form1Value = 1;

Form2 f2 = new Form2 ( );
f2.ShowDialog ( this );      //Form2的擁有者是Form1
Form1 f1 = ( Form1 ) this.Owner;

//取到Form1的值是1

MessageBox.Show ( f1.Form1Value .ToString ( ) );
//給Form1的Form1Value賦值222
f1.Form1Value = 222;

5.透過窗體的公有屬性值和Application.OpenForms屬性

說明:Application.OpenForms屬性:取得屬於應用程式的開啟窗體的集合。 (此屬性在 .NET Framework2.0版中)
實作程式碼如下:
在窗體Form1中
public int Form1Value = 1;

Form2 f2 = new Form2 ( );
f2.Show ( );

在窗體Form2中
string formName = "Form1";
Form fr = Application.OpenForms [ formName ]; )

{

    Form1 f1 = ( Form1 ) fr;
    //取Form1的值為1
    MessageBox.Show ( f1.Form .ToString ( ) ); = 222;
}

6.透過事件
實作程式碼如下:
在窗體Form2中定義公有屬性Form2Value,取得並設定textBox1的文字值

且也定義一個accept事件

public string Form2Value
{n
        return this.textBox1.Text;
    }
    set
    {
    EventHandler accept;
private void button1_Click ( object sender , EventArgs e )
{
    if ( accept != null )
    {
        accept ( this , EventArgs.Empty );  //當視窗觸發事件,傳遞自身引用
 2 .accept += new EventHandler ( f2_accept );
f2.Show ( );

void f2_accept ( object sender , EventArgs e )

{
//事件的接收者透過一個簡單的類型轉換得到一個簡單的引用類型的引用= (Form2) sender;
//接收Form2的textBox1.Text
    this.textBox1.Text = f2.Form2Value; 
}


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言編譯器怎麼加下一格 c語言編譯器怎麼加下一格 Mar 03, 2025 pm 05:44 PM

c語言編譯器怎麼加下一格

C語言中NULL的替代方案有哪些 C語言中NULL的替代方案有哪些 Mar 03, 2025 pm 05:37 PM

C語言中NULL的替代方案有哪些

c語言編譯器哪個好? c語言編譯器哪個好? Mar 03, 2025 pm 05:39 PM

c語言編譯器哪個好?

C語言中NULL在現代編程中還重要嗎 C語言中NULL在現代編程中還重要嗎 Mar 03, 2025 pm 05:35 PM

C語言中NULL在現代編程中還重要嗎

c語言編譯器網頁版有哪些? c語言編譯器網頁版有哪些? Mar 03, 2025 pm 05:42 PM

c語言編譯器網頁版有哪些?

c語言編譯器複製代碼方法 c語言編譯器複製代碼方法 Mar 03, 2025 pm 05:43 PM

c語言編譯器複製代碼方法

c語言在線編程網站 c語言編譯器官方網站匯總 c語言在線編程網站 c語言編譯器官方網站匯總 Mar 03, 2025 pm 05:41 PM

c語言在線編程網站 c語言編譯器官方網站匯總

c語言編譯器安裝教程(電腦版) c語言編譯器安裝教程(電腦版) Mar 03, 2025 pm 05:41 PM

c語言編譯器安裝教程(電腦版)

See all articles