日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#中使用自定義消息

admin
2017年5月27日 14:59 本文熱度 8681

      C# WinForm編程中,你是否遇到過(guò)這樣的問(wèn)題,在主窗口Form1中點(diǎn)擊按鈕,彈出一個(gè)子窗口Form2,你希望在Form2中調(diào)用Form1的函數(shù),改變Form1的顯示,卻發(fā)現(xiàn)Form1不聽(tīng)話,達(dá)不到預(yù)期效果。有的人說(shuō)我調(diào)試了的,那段函數(shù)確實(shí)執(zhí)行了,怎么還是沒(méi)有顯示呢?

案例:

在winform中,我在點(diǎn)擊from1的一個(gè)按鈕,彈出from3執(zhí)行一個(gè)函數(shù),其實(shí)form3就是彈出一個(gè)自制的密碼輸入框但是呢。然后我再from3中調(diào)用
    if (password == PassWord)
            {
                comfirm = true;
                form1.updateMac(row, col);
                this.Close();
            }
在updateMac(row,col)中我有個(gè)dataGridView1.Rows[row].Cells[col].Style.BackColor = Color.Green;但是顏色死活不變,特別奇怪,放在form1的其他函數(shù)里就能變,就是凡在這個(gè)form3調(diào)用form1的函數(shù)里,不能變色,是為什么啊

 

      其實(shí)Form1不聽(tīng)話是必然的,你在Form2中new Form1(),這樣新新建了一個(gè)窗口對(duì)象,和本身的父窗口是兩個(gè)不同的對(duì)象,你改變對(duì)象A怎么能期望對(duì)象B也變化呢?

      那有沒(méi)有什么辦法可以實(shí)現(xiàn)我們預(yù)期的效果呢?

      有的,那就是利用win32函數(shù),使用自定義消息,做C++的人對(duì)這個(gè)應(yīng)該不陌生,下面就給大家講一下C#自定義消息。

消息發(fā)送方

一、引入命名空間

[csharp] view plain copy
  1. using System.Runtime.InteropServices;  

二、消息定義

[csharp] view plain copy
  1. //自定義的消息  
  2.   
  3. public const int USER = 0x500;  
  4.   
  5. public const int MYMESSAGE = USER + 1;  

 

三、自定義結(jié)構(gòu)體

[csharp] view plain copy
  1. public  struct My_lParam  
  2.   
  3.        {  
  4.   
  5.            public int i;  
  6.   
  7.            public string s;  
  8.   
  9.        }  

 

四、重寫(xiě)消息發(fā)送函數(shù)

[csharp] view plain copy
  1. //消息發(fā)送API  
  2.   
  3. [DllImport("User32.dll", EntryPoint = "SendMessage")]  
  4.   
  5. private static extern int SendMessage(  
  6.   
  7. IntPtr hWnd,        // 信息發(fā)往的窗口的句柄  
  8.   
  9. int Msg,            // 消息ID  
  10.   
  11. int wParam,         // 參數(shù)1  
  12.   
  13. ref My_lParam lParam  
  14.   
  15. );  


 

五、獲取窗體句柄的函數(shù)引入

[csharp] view plain copy
  1. [DllImport("User32.dll", EntryPoint = "FindWindow")]  
  2.   
  3. private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);  

 

六、消息發(fā)送

[csharp] view plain copy
  1. IntPtr ptr = FindWindow(null"Form1");//獲取接收消息的窗體句柄,這個(gè)地方有一點(diǎn)我們要注意Form1必須唯一,否則windows無(wú)法將消息正確發(fā)送  
  2.   
  3. //消息構(gòu)建  
  4.   
  5. My_lParam m = new My_lParam();  
  6.   
  7. m.s = textBox1.Text;  
  8.   
  9. m.i = m.s.Length;  
  10.   
  11. SendMessage(ptr, MYMESSAGE, 1, ref m);//發(fā)送消息  


 

消息接收方

一、引入命名空間

[csharp] view plain copy
  1. using System.Runtime.InteropServices;  

 

二、消息定義

[csharp] view plain copy
  1. //自定義的消息  
  2.   
  3. public const int USER = 0x500;  
  4.   
  5. public const int MYMESSAGE = USER + 1;  

 

三、重寫(xiě)窗體的消息處理函數(shù)

      

[csharp] view plain copy
  1. ///重寫(xiě)窗體的消息處理函數(shù)DefWndProc,從中加入自己定義消息 MYMESSAGE 的檢測(cè)的處理入口  
  2.   
  3.        protected override void DefWndProc(ref Message m)  
  4.   
  5.        {  
  6.   
  7.            switch (m.Msg)  
  8.   
  9.            {  
  10.   
  11.                //接收自定義消息MYMESSAGE,并顯示其參數(shù)  
  12.   
  13.                case MYMESSAGE:  
  14.   
  15.                    Form2.My_lParam ml = new Form2.My_lParam();  
  16.   
  17.                    Type t = ml.GetType();  
  18.   
  19.                    ml = (Form2.My_lParam)m.GetLParam(t);  
  20.   
  21.                    label1.Text = ml.s;  
  22.   
  23.                    break;  
  24.   
  25.                default:  
  26.   
  27.                    base.DefWndProc(ref m);  
  28.   
  29.                    break;  
  30.   
  31.            }  
  32.   
  33.        }  


 如上,我們就實(shí)現(xiàn)了一個(gè)C#自定義消息的程序,貼上一個(gè)程序下載地址:http://download.csdn.net/detail/bdstjk/2707423。

不知道大家在C#中有沒(méi)有更好的實(shí)現(xiàn)方法。

經(jīng)過(guò)研究,C#確實(shí)有方法可以更簡(jiǎn)單的實(shí)現(xiàn)這個(gè)功能,請(qǐng)看C# 委托實(shí)例(跨窗體操作控件)

 

最后再給大家介紹一種最簡(jiǎn)單的C#跨窗體操作

 

程序運(yùn)行示意:

 


該文章在 2017/5/27 14:59:49 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

天天操夜夜操狠狠操视频| 一区欧美精品| 精品国产乱码久久久久久密臀麻豆| free性欧美| 99re视| 亚洲一区综合网| 99一区二区三区四区| 国产99自拍在线| 欧日韩久麻| 老鸭窝骚女熟妇| 3p国产视频| 人妻AV电影一区二区| 久久国产无码| 大香蕉伊人网在线精品| 中文字幕AV性| 国产精品原创久久| 黄片MV视频| 亚洲性爱综合天堂| 精品人妻精品一区二区三区| 久久精品国产成人懂色| 精品国产欧美一区豆花| 五月天一二三四五区AV| 欧美粗大硬在线视频| 欧美色诱cc| 欧美xo影院一区| 偷拍自拍 欧美色图| 亚洲日韩中文人妻| 尤物日韩1314视频| 少妇无码宗合网| av中文字幕在线人妻| 美国黑人抽查一进一出久久| 九九日这里有精品| 日本在线视频二区| 视频二区欧美| 欧美极品国产一区3p| 日本久久黄视频| 中文字幕在线观看一页二页三页| 全球黄片日韩| 在线中文无码播放| 91九色蜜臀porn| 思思久久国产精品|