Visual studio之C 的一些常見問題

2022-03-26 05:23:04 字數 3712 閱讀 2194

單擊button控制項,執行對應操作。

選擇要操作的button控制項,在屬性欄內點選類似閃電標誌一樣的事件,找到操作,選擇click,雙擊,即會在主程式中生成對應的單擊事件處理**,如下所示:

private void combtn_click(object sender, eventargs e)

sender代表觸發事件的那個控制項,此處,sender既是按鈕,如上所示,將sender賦值給正確型別的物件,即可實現對button控制項的操作。

e則代表該事件傳入的引數。此處沒有使用,在竹影青瞳的部落格關於(object sender, eventargs e)中已做了詳細介紹。

namespace lazercontrol

}

若是需要宣告乙個全域性的類變數,而不是單個變數,那就需要先new乙個該類即可,如下:

namespace lazercontrol

}// 在初始化函式內,new乙個變數

private void initializeserial()

加了static後,new的實體儲存在裡,之後再new任何次,實體不變,就這乙個。

未加static,則new的實體儲存在裡,之後每new一次,會生成乙個新的實體。

此處感謝曾老師的c#技術支援。(手動陰笑)

單擊按鍵開啟新的窗體

首先,建立乙個新窗體,方法為,右擊專案名稱點選新增windows窗體,重新命名名稱即可,此處名稱為comsetting。接著在主窗體內例項化窗體,**如下:

namespace lazercontrol

// ```其他**省略

}}

按照1方法,進入到按鍵觸發處理函式中,將視窗例項化,然後呼叫show()函式,開啟新窗體,**如下:

private void combtn_click(object sender, eventargs e)

c#控制項大小隨窗體大小等比例變化

參考天黑不熄燈的的部落格c#控制項大小隨窗體大小等比例變化。

** 定義全域性變數

private float x;//當前窗體的寬度

private float y;//當前窗體的高度

** 功能函式setcontrols

//根據窗體大小調整控制項大小

private void setcontrols(float newx, float newy, control cons)

);//獲取控制項的tag屬性值,並分割後儲存字串陣列

float a = system.convert.tosingle(mytag[0]) * newx;//根據窗體縮放比例確定控制項的值,寬度

con.width = (int)a;//寬度

a = system.convert.tosingle(mytag[1]) * newy;//高度

con.height = (int)(a);

a = system.convert.tosingle(mytag[2]) * newx;//左邊距離

con.left = (int)(a);

a = system.convert.tosingle(mytag[3]) * newy;//上邊緣距離

con.top = (int)(a);

single currentsize = system.convert.tosingle(mytag[4]) * newy;//字型大小

con.font = new font(con.font.name, currentsize, con.font.style, con.font.unit);

if (con.controls.count > 0)

}}

** 在窗體的load事件中新增

private void form1_load(object sender, eventargs e)

** 在窗體的resize事件中新增

private void form1_resize(object sender, eventargs e)

注意:窗體屬性內maximizebox要設定為true

c#窗體全屏功能

參考jack_meng的部落格c#窗體全屏功能。

設定視窗當使用者按enter時,所單擊的窗體的按鈕

在窗體的load事件中,新增如下**:

private void mainwin_load(object sender, eventargs e)

也可在窗體屬性內找到accecptbutton,選擇對應button按鍵的id。

設定書籤

按下組合鍵ctrl+f2設定書籤,再按組合鍵ctrl+f2消除書籤;按下f2跳轉到下乙個書籤,按下shift+f2跳轉到上乙個書籤。

顯示行號

點選工具-->選項-->文字編輯器-->c#-->勾選行號

switch()語句中,case後面的常量表達方法

在c/c++中,switch()語句中的const常常使用巨集定義來定義,但在c#中卻沒有巨集定義,所以可以用c#的enum來解決,也可以用const常量來表示,舉例, case兩種值,0xf0/0x0f,分別為mod1/mode2,若直接用數字表示則不太直觀,所以用const來替代,**如下:

const byte mode1 = 0xf0;    //注意常量宣告為 byte

const byte mode1 = 0x0f;

switch(mode)

多個非ui執行緒如何訪問ui控制項而不被報異常

在多執行緒程式中,新建立的執行緒不能訪問ui執行緒建立的視窗控制項,如果需要訪問視窗中的控制項,可以在視窗建構函式中將checkforillegalcrossthreadcalls設定為 false,即將將禁止跨執行緒訪問的檢查禁能,即允許多執行緒訪問ui控制項,這個會造成無端的錯誤,因此不推薦使用,可以參考此篇部落格c# 跨執行緒呼叫控制項,

// 跨執行緒訪問不被檢查

control.checkforillegalcrossthreadcalls = false;

參考於多執行緒中使用checkforillegalcrossthreadcalls = false訪問視窗;

11.不定期更新

Visual studio之C 跨執行緒呼叫UI控制項

當前串列埠通訊專案,多個執行緒需要同時利用richtextboxmsg控制項列印資訊,直接呼叫會造成執行緒不安全,嚴重的時候會直接導致ui執行緒掛掉,因此本篇就跨執行緒呼叫ui控制項做個記錄。提示介面控制項的委託型別 delegate void showinfocallback string tex...

visual studio之遠端除錯

遠端除錯需要以下幾個步驟 1 在遠端裝置上安裝remote debugger,啟動,選擇tools options,設定為no authenication,勾選allow any user to debug,並將maximum idle time設為0 即可以一直閒置而不會自動退出程序 2 本地裝置...

visual studio之預編譯頭

之前在一公司實習時,每天早上一上來就是更新 編譯 整個sln編譯一次,在我那機器上,算了下時間,接近3個小時.什麼概念,就是早上9點半上班,等編譯完後,可以去午睡了.後來實在受不了,上網找了新增預編譯頭的方法,在工作群裡吶喊了下,無人鳥我.當實習生的痛苦啊.做畢設開始沒想到加編譯頭,不過 越寫越是多...