? 使用VS2019,建立窗體應(yīng)用程序,借助一系列控件實現(xiàn)畫圖功能。
? 結(jié)合組件與控件的使用。
目錄
一、預(yù)備知識
1、什么是C#的組件和控件
(1)共同點
(2)不同點
二、主要步驟
1、軟件以及環(huán)境
2、設(shè)置接口
3、界面設(shè)計
4、編寫代碼
5、編譯程序和運行
三、編寫代碼
1、設(shè)置不同繪制模式
2、為畫板添加事件
(1)MouseDown事件
?(2)MouseUp事件
(3)DoubleClick事件?
(4)Load事件
四、實現(xiàn)效果
一、預(yù)備知識
1、什么是C#的組件和控件
? ? 組件和控件是兩種不同的“工具”,有共同點,也有許多不同之處。
(1)共同點
①都不需要專門注冊。
②運行都需要.NET Framework支持,開發(fā)前必須在機器上安裝C#.NET軟件。
③都需要在桌面應(yīng)用程序或控制臺應(yīng)用、程序中調(diào)試或行。
(2)不同點
①組件是組件類模塊,控件是用戶控件模塊。
②組件的父類是Component,控件的父類是UserControl。
③組件沒有界面,控件有界面。
④組件通過添加引用使用,控件可直接拖放到窗體上。
⑤創(chuàng)建組件首先要創(chuàng)建類庫應(yīng)用程序。
二、主要步驟
1、軟件以及環(huán)境
? ? 在機器上安裝C#.NET軟件,打開C#.NET編程環(huán)境,建立控件應(yīng)用程序。在其中建立解決方案、應(yīng)用程序項目和COM類模塊或控件模塊等文件。
2、設(shè)置接口
? ? 對于控件應(yīng)用程序,添加接口模塊,設(shè)計所需的接口。對于COM組件應(yīng)用程序添加類模塊,編寫類,設(shè)置類的父類和要實現(xiàn)的接口,在類中添加屬性、方法等成員。
private DrawingControl.DrawingCtl drawingCtl1;
3、界面設(shè)計
? ? 對于控件應(yīng)用程序添加控件模塊(默認已加載一個控件模塊),編寫控件,設(shè)計控件界面,為控件添加屬性、方法和事件。
4、編寫代碼
? ? 在方法或事件中編寫代碼,完成相應(yīng)功能。(詳細在下一部分介紹)
5、編譯程序和運行
? ? 編譯程序,生成組件庫文件或控件程序,都是DLL文件。創(chuàng)建外部應(yīng)用程序,加載組件或控件,對其進行調(diào)試和運行。
三、編寫代碼
實現(xiàn)點、線、矩形、橢圓、圓、填充矩形、填充橢圓、填充圓、填充字體的繪制。
1、設(shè)置不同繪制模式
? ? 主要是為了區(qū)分不同的繪制模式,可以利用bool類型的變量作為“開關(guān)”;也可以使用鼠標(biāo)的Cursors變量的不同值作為“開關(guān)”;或定義一個整型變量(drawmode),通過取不同的數(shù)值來作為“開關(guān)”。
? ? 三者的不同之處在于,如果使用bool類型的變量作為“開關(guān)”,如果涉及的按鈕較多,增加了代碼長度,且不便于管理。例如:繪圖有ABCD四種不同的方法,我們在繪制時,只需要使用A方法,那么在A的點擊事件中,需要同時設(shè)置BCD方法的bool變量為false。在這里需要注意一旦其他方法沒有設(shè)置關(guān)閉,會引起畫板事件同時處理多種繪圖方法,造成混亂;使用Cursor作為“開關(guān)”時,繪圖時,鼠標(biāo)會呈現(xiàn)不同的形式,對總體代碼影響不大;定義一個整型變量,當(dāng)點擊不同的按鈕時,整型變量有不同的值相對應(yīng),這樣避免了bool變量造成混亂的情況。
? ? 使用在這里,我們通過Cursor的不同值與定義整形變量(drawmode)相結(jié)合的方法,來區(qū)分不同的畫圖方法。例如:
按鈕的MouseDown事件:
private PictureBox pic = new PictureBox();?
pic.Cursor = Cursors.UpArrow;
bs = new SolidBrush(Color.Red);//創(chuàng)建畫筆
drawmode1 = 1;
2、為畫板添加事件
(以畫橢圓為例)
(1)MouseDown事件
? ? 通過區(qū)分不同的繪圖模式,來設(shè)置不同的繪制方法。
pic.Cursor == Cursors.Cross && drawmode == 3
? ? 定義繪圖方法。
x1 = e.X;
y1 = e.Y;
pen1 = mypen;
?(2)MouseUp事件
x2 = e.X;
y2 = e.Y;
int w;
int h;
w = Math.Abs(x2 - x1);
h = Math.Abs(y2 - y1);
Rectangle r;
///不同的畫法也能實現(xiàn)
if (x1 < x2 && y1 < y2)
{
r = new Rectangle(x1, y1, w, h);
g.DrawEllipse(pen1, r);
}
else if (x1 > x2 && y1 > y2)
{
r = new Rectangle(x2, y2, w, h);
g.DrawEllipse(pen1, r);
}
else if (x1 < x2 && y1 > y2)
{
r = new Rectangle(x1, y2, w, h);
g.DrawEllipse(pen1, r);
}
else
{
r = new Rectangle(x2, y1, w, h);
g.DrawEllipse(pen1, r);
}
x1 = x2;
y1 = y2;
(3)DoubleClick事件?
pic.Cursor = Cursors.Arrow;
drawmode = 0;
clicknum = 0;
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
(4)Load事件
? ? 為組件的添加Load事件
pic.Cursor = Cursors.Arrow ;
pic.MouseDown += new MouseEventHandler(this.pic_MouseDown1);//定約事件
pic.MouseUp += new MouseEventHandler(this.pic_MouseUp);
pic.DoubleClick += new EventHandler(this.pic_DoubleClick);
四、實現(xiàn)效果
請勿抄襲,文章來源:http://www.zghlxwxcb.cn/news/detail-400907.html
代碼請到主頁查看。?文章來源地址http://www.zghlxwxcb.cn/news/detail-400907.html
到了這里,關(guān)于基于C#的畫圖應(yīng)用程序(窗體應(yīng)用程序)C#組件、控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!