第一大內容窗體:
一、控制標題欄
Text - 控制標題欄的文字
Icon - 控制標題欄的圖標
MaximizeBox - 窗體最大化
MinimizeBox -窗體最小化
ControlBox - 所有的最大化、最小化、關閉按鈕
二、控制背景
BackColor - 控制背景色
BackgroundImage - 背景圖
BackgroundImageLayout - 背景的布局方式
Tile-平鋪;Center-居中;Stretch-拉伸;Zoom-按比例縮放
三、控制邊框
FormBorderStyle - 控制邊框的樣式
Sizable-可調邊框;FixedSingle-不可調邊框;None-無邊框。
Size (Width,Height):窗體的大小。
MinimumSize (Width Height)最小的大小
MaximumSize (Width Height) 最大的大小
四、控制前景
ForeColor - 文字顏色
Font-文字字體
五、輔助屬性:
WindowState - 窗體的啟動狀態。
Normal-設計時的大小。Maximized-窗體啟動最大化。Minimized-啟動最小化。
StartPosition -窗體的啟動位置。
CenterScreen - 在屏幕中央
ShowInTaskbar - 窗體運行時,是否在任務欄顯示。
TopMost - 是否置於頂層顯示
Opacity -- 透明度。100%完全不透明。0%完全透明。
TransparencyKey - 窗體的透明色。
案例一:做一個遮罩窗體:
1.把邊框去掉。 FormBorderStyle = none;
2.設為啟動最大化。 WindowState = Maximized
3.設背景色為黑色。 BackColor=black
4.設為頂層窗體 TopMost = true
5.設置不在任務欄顯示。 ShowInTaskbar=false
技巧:添加一個新窗體並設為啟動窗體:
1.在解決方案管理器的項目右擊,選擇添加-windows窗體。
2.在解決方案管理器中,把Program.cs打開,修改后面的Application.Run().
案例二:做一個不規則的窗體:
1.找一個不規則的透明底色的圖片。
2.把窗體背景設為這張圖片。
3.設置窗體的透明色TransparencyKey
4.把邊框去掉。FormBorderStyle=none
第二大內容:三個最常用的控件:
標簽:Label
Text - 標簽文字
Image - 圖像
TextAlign - 文字的位置9個位置
ImageAlign - 圖像的位置9個位置
AutoSize - True-自動調整大小,只有一個控制點。False-手動調整大小,有8個控制點。
ForeColor——文字色
BackColor——背景色
Font——字體
按鈕:Button
Text - 按鈕文字
Image - 按鈕圖片
TextAlign - 文字的位置9個位置
ImageAlign - 圖像的位置9個位置
FlatStyle- 按鈕的形態。 Standard-標准。Flat-平面狀態。Popup-稍微凸出一點。
FlatAppearence - 按鈕形成的詳細設置。
ForeColor——文字色
BackColor——背景色
Font——字體
Dock---按鈕占據鎖在空間的位置,fill--占滿位置
(代碼寫的Button btn=new Button (); btn.Dock = DockStyle.Fill;)
注:窗體中有兩個很重要的屬性: AcceptButton,CancelButton分別用來指定兩個按鈕。在窗體上按回車鍵會自動調用AcceptButton中的代碼,按ESC鍵會調用CancelButton的代碼。
文本框:TextBox
Text - 按鈕文字
MultiLine-是否是多行文本框。true-多行文本,false-單行文本
PasswordChar-密碼框中的字符樣式
ReadOnly-只讀,不能改
MaxLength-最多輸入多少
ScrollBars----Both出現滾動條
Dock----上下左右中占滿的方式
Anchor---上下左右,選中的方向的距離,將會不隨邊框的改變而改變
案例三:做一個登錄窗體,並實現登錄功能。
單選按鈕+復選按鈕
RadioButton,CheckBox
Text-單選按鈕上的文字
Checked - 單選按鈕是否被選中true/false
Tag - 一般是用保存單選按鈕背后的值。
Image - 圖像 TextAlgin,ImageAlign
Appearance:按鈕外觀。Normal-普通的單選按鈕。Button-按鈕形式的單選按鈕
下拉列表combobox
DropDownStyle - DropDown--既可以選,又可以填寫。DropDownList--只能選
Items--編輯項(靜態時使用,一般情況下都是用函數代碼連接數據庫里的表)
使用代碼放:
(1).使用代碼逐項添加
a.造一個實體類 :重寫父類的ToString()方法,返回要顯示的屬性。
b.使用實體造對象
c.把對象添加到下拉列表的items集合中去。
案例:把民族表中的數據讀取出來加載到下拉列表中去。
a.准備實體類、鏈接類、數據訪問類。
b.在界面后台代碼中,調用數據訪問類,獲取返回來的民族列表數據。
c.遍歷列表中的每一項,把它每個加進下拉列表的Items集合中。
(2).直接使用數據綁定
需要用到的屬性:
DataSource - 下拉列表的數據來源,一般是實體類的集合。
DisplayMember - 要作為顯示項的屬性名。
ValueMember - 要作為值項的屬性名。
案例:把民族表中的數據讀取出來加載到下拉列表中去。
a.准備實體類、鏈接類、數據訪問類。
b.調用數據訪問類,把返回來的數據,賦給下拉列表的DataSource
c.設置下拉列表的DisplayMember和ValueMember屬性。
案例:如何為下拉列表中加上“請選擇”的項
(1).使用代碼逐項添加
只需在逐項添加的代碼之前,加上一個“請選擇”的項即可
(2).直接使用數據綁定
需要事選在數據源(即列表集合)中添加一個“請選擇”的項。綁定即可上去。
2.如何把選中項獲取出來。
相關屬性:SelectedItem--選中的項
使用下拉列表的SelectedItem屬性來獲取,獲取出來的類型是Object,需要強制轉換成相應的類型。然后再獲得某相應屬性的值。
案例:獲取選中的民族的名稱和Code值出來。
List<ChinaStates> list = new ChinaStatesDA().Select();
//填進去
list.Insert(0,new ChinaStates(“-1”,”請選擇”));
Combobox1.DataSource = list;
Combobox1.DisplayMember = "AreaName";
Combobox1.ValueMember = "AreaCode";
第一項加“請選擇”,此圖比較全。此圖為取表中數據放到combobox中,下拉列表
以此函數放到整個窗體的Load中
private void FillCounty()
{
string parent = "";
if (cbCity.SelectedItem != null)//判斷前面那一個combobox中的數據是否為空
{
//取數據
parent = (cbCity.SelectedItem as ChinaStates).AreaCode;
//因其需要前面的數據的id引導此combobox中的數據,所以去前一個數據的code
}
List<ChinaStates> list = new ChinaStatesDA().Select(parent);
//填進去
cbCounty.DataSource = list;
cbCounty.DisplayMember = "AreaName";
cbCounty.ValueMember = "AreaCode";
}
Combobox在C#中用的主要函數:
SelectedItem:獲取或設置當前combobox所選定的項(0,1,2,3,....),即第幾項
SelectedIndex:獲取或設置指定當前選定項的索引
(即當comboBox1.SelectedIndex為多少時,執行什么---相應的函數)
時間表控件 DateTimePicker
Value----時間值---顯示的默認值
ListView
主要是用來顯示的控件。
view有五種顯示的視圖:LargeIcon大圖標、SmallIcon小圖標、Tile平鋪、List列表、
Details詳細(以列顯示的情況,用Details)
注意:
1.如果要使用Details視圖,一定需要先添加列。
2.進行修改或刪除的時候,一般需要把主鍵放在每個ListViewItem的Tag里。使用窗體的構造函數把主鍵傳給目標窗體。
View 屬性- 五種視圖狀態
SmallImageList,LargeImageList(組件里邊的imagelist,設置兩個,編輯大小和選擇圖像;然后在listview屬性里選擇SmallImageList,LargeImageList,挑選下拉項里邊的大小imagelist)
例一: private void Show()//在listview中顯示表中想要顯示的數據
{
listView1.SelectedItems.Clear();
//取數據
List<Info> list = new InfoDA().Select();
//加進去
foreach (Info data in list)
{
ListViewItem li = new ListViewItem(data.Name);
li.Tag = data.Code;
li.ImageIndex = 0;//用第幾個圖像,因為imagelist里邊可以放多個圖像
li.SubItems.Add(data.Sex ? "男" : "女");
li.SubItems.Add( new NationDA().Select( data.Nation).Name );
//根據Info表里的nation搜索Nation表里的Name,輸出
li.SubItems.Add(data.Birthday.ToString("yyyy年MM月dd日"));
if (data.Sex == true)//呈現分組現象
{
li.Group = listView1.Groups[0];
}
else
{
li.Group = listView1.Groups[1];
}
listView1.Items.Add(li);//添加到listview中
}
}
例二:
private void ShowAll()
{
listView1.SelectedItems.Clear();
List<TeacherData> list = new TeacherDA().Select();
ShowSelect(list);
}
private void ShowSelect(List<TeacherData> list)
{
listView1.Items.Clear();
if (list == null)
return;
foreach (TeacherData da in list)
{
ListViewItem li = new ListViewItem(da.Tname);
li.Text = da.Tname;
li.SubItems.Add(da.Tsex);
li.SubItems.Add(da.Tbirthday.ToString("yyyy年MM月dd日"));
li.SubItems.Add(da.DepartmentData.Name);
listView1.Items.Add(li);
}
}
FullRowSelect - 選擇整行,鼠標點擊
GridLines - 是否顯示格式,網格式的顯示方式
HoverSelection--鼠標移動上去就有顏色變化,表示被選中,易觀看數據
HotTracking--鼠標選中后移開,有顏色變化(顏色變淡)--------------------
-----------------------------與HoverSelection為true時方可使用
SelectedItems - 選中項的集合
Tag - 項的值
ImageIndex - 項所使用的圖片索引。——需要事先給ListView設置SmallImageList和 LargemageList
Columns - 列的集合。
Items - 項的集合。
Groups- 組的集合---Name,Text
事件:SelectIndexChanged---------選中發生更改
傳出主鍵值,給窗體二:
窗體一:
Button按鈕---
private void button2_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
string key = listView1.SelectedItems[0].Tag.ToString();
Form2 f2 = new Form2(key);
f2.Show();
}
}
窗體二:
private string _Key = "";
public Form2(string key)//構造函數
: this()
{
_Key = key;//得到主鍵值,_Key可當成主鍵值來用
}
Listview主要用到的C#函數:
SelectedItems:獲取在控件中選定的項
Items:獲取包含空間中所有項的集合
DataGridView顯示網格中可以自定義數據的行和列(不全)
Anchor----定義邊框距離窗體的邊的距離
AutoSizeColumnsMode--確定可見列的自動調整大小模式----fill
對話框:
一、提示對話框:
DialogResult result = MessageBox.Show("提示文字","標題文字",按鈕設置,圖標設置)
if(result == 枚舉)
{
}
二、其它對話框:
(一)ColorDialog:
1、屬性:
Color - 選中的顏色。
2、方法:
ShowDialog() - 把顏色對話框顯示出來。返回一個DialogResult對象.
3、案例:
DialogResult result = colorDialog1.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
label1.ForeColor = colorDialog1.Color;
}
(二)FontDialog:
1.屬性:
Font - 選中的字體
2.方法:
ShowDialog() - 把字體對話框顯示出來。返回一個DialogResult對象
3.案例:
DialogResult result = fontDialog1.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
label1.Font = fontDialog1.Font;
}
(三)OpenFileDialog,SaveFileDialog:
1.屬性:
FileName - 打開文件的全名(包括路徑)
InitialDirectory - 初始路徑。默認在“我的文檔”
Filter - 打開過濾。顯示名|通配名|顯示名|通配名 如:文本文件|*.txt|C#源文件|*.cs|所有文件|*.*
2.方法:
ShowDialog() - 顯示打開對話框,返回DialogResult
3.舉例:
DialogResult result = openFileDialog1.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
label1.Text = openFileDialog1.FileName;
}
(四)FolderBrowserDialog - 路徑選擇對話框
1.屬性
SelectedPath - 選中的路徑。
RootFolder - 默認打開的路徑。
Description - 對話框中的提示信息
2.方法
ShowDialog()
3.舉例
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
label1.Text = folderBrowserDialog1.SelectedPath;
}
三、自定義對話框:
自己做個窗體,用來作為對話框顯示出來。
第一大步:做對話框窗體
1.做一個窗體,把要實現的功能做出來。
2.放兩個按鈕,設置這兩個按鈕的DialogResult屬性。
第二大步:調用對話框顯示,並獲取值。
1.把對話框窗體給new出來。
2.使用對話框窗體的ShowDialog()顯示出來。返回DialogResult對象
3.根據返回的DialogResult,判斷操作。
TestDialog td = new TestDialog();
DialogResult result = td.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
label1.Text = td.Password;
}
布局:
一、默認布局(空布局):
1.Location - 位置距離上方和左方的距離
2.Anchor - 固定邊距上下左右的距離不變的設置,哪邊被選中,那邊距離邊框的距離就不變
二、邊界布局:
Dock - 上右下左中,靠在邊框里邊的相應位置
三、網格布局:
TableLayoutPanel控件,使用它來格式化行和列。右上方黑色小三角點擊,編輯行和列
使用內部放置的控件的RowSpan和ColSpan來設置控件的跨行與跨列。
Column-----跨行
Row------跨列
Appearance-----指示選項卡是繪制成按鈕還是繪制成常規選項卡
網格布局:(容器中)tableLayoutPanel
用代碼編輯tableLayoutPanel的行和列(在整個窗體的load中):
tableLayoutPanel1.ColumnStyles.Clear();//清理原來的列
tableLayoutPanel1.ColumnCount = 20;//設置新的列(這里的20指的是列數)
for (int i = 0; i < 20; i++)//循環20次,編輯列的屬性
{
ColumnStyle style = new ColumnStyle(SizeType.Percent, 5);
//列的屬性,括號中第一個數Percent為列按百分比實現寬,第二個數為這個寬占總體的5%
tableLayoutPanel1.ColumnStyles.Add(style);//添加列
}
tableLayoutPanel1.RowStyles.Clear();//清理原來的行
tableLayoutPanel1.RowCount = 20;//設置新的行(這里的20指的是行數)
for (int i = 0; i < 20; i++)//循環20次,編輯行的屬性
{
RowStyle style = new RowStyle(SizeType.Percent, 5);
//列的屬性,括號中第一個數Percent為行按百分比實現高,第二個數為這個高占總體的5%
tableLayoutPanel1.RowStyles.Add(style);//添加行
}
四、流式布局:
FlowLayoutPanel控件。
它有個重要的屬性:FlowDirection - 流的方向(從左往右,從上往下,從右往左,從下往上)
五、卡片布局:
TabControl控件。
它里面包含多個TabPage,放在TabPages集合中。
Appearance------Buttons設置成按鈕形式;FlatButtons設置成平面選項卡;
Normal正常的圖片顯示形式
Enabled----true可用;false不可用
六、分割布局:
SplitContainer控件。把窗口橫向或縱向拆分。
Orientation (選中整個SplitContainer方可出現)
- 分割的方向。Vertical縱向分割;Horizontal橫向分割
托盤圖標:
NotifyIcon - 做拖 盤圖標的。
屬性:
Text - 拖盤文字(即在下方的顯示圖標在鼠標移動上是現實的文字)
Icon - 拖盤圖標(圖像:ico格式)
ContextMenuStrip (屬性)- 右擊時候的菜單(即點擊圖標右鍵,出現選擇項菜單)。
右鍵菜單。
ContextMenuStrip(容器)
1.學會編輯菜單項。 - 是分隔線。
2.如何設置熱鍵 &字母
3.如何設快捷鍵。右擊菜單項,在屬性中選擇ShortCutKey中的組合鍵即可
4.如何給菜單項加圖標?
5.右擊菜單項,選擇屬性,設置Image(菜單選擇項前的圖像)
把右鍵菜單掛到拖盤圖標上。
右擊NotifyIcon1,選擇屬性。設置ContextMenuStrip
工具條:(容器)ToolStrip
1.會加按鈕並設置按鈕的圖像及文字
2.會調整按鈕的圖像大小。把ToolStrip的ImaegScalingSize調整大。再把每個按鈕的Size屬性設大即可
3.會顯示文字和圖標。DisplayStyle,TextImageRelation這兩個屬性來設置。
文件及文件夾操作:
一、流:
文件流:FileStream。用來操作文件。
命名空間:System.IO;
使用流的步驟:——最原生的流的操作。——通用性最強的。
1.創建流。
FileStream fs = new FileStream("文件路徑",FileMode枚舉);
FileMode.Appen - 如果存在,就打開追加;如果不存就新建
FileMode.Create - 如果存在,覆蓋。如果不存在就新建。
FileMode.OpenOrCreate。如果存在就打開,不存在就新建。
2.讀取或寫入流。
(1)..寫入流:
第一步:需要把字符串,變成二進制數組:
byte[] aaa = System.Text.Encoding.Default.GetBytes(txt.Text);
第二步:寫入流
fs.Write(aaa, 0, aaa.Length);
//第一個參數:要被寫進去的二進制數據;
//第二個參數:開始的位置,一般都是0
//第三個參數:要往流里面寫入的長度。一般都是數組的length
(2).讀取流:
第一步:准備一個二進制的數組,用來接收二進制數據。
byte[] aaa = new byte[fs.Length]; //數組的長度,一般使用流的長度來定義,因為這個數組就是用來存儲流中的數據的。
第二步:使用進行讀取,把讀出來的內容放在上面的二進制數組中。
fs.Read(aaa,0,aaa.Length);
//第一個參數:被讀出來的二進制數據;
//第二個參數:開始的位置,一般都是0。從哪開始讀
//第三個參數:要讀取的長度。一般都是數組的length。即流的長度
第三步:把讀出的二進制數組變成字符串。
string s = System.Text.Encoding.Default.GetString(aaa);
3.關閉流。
fs.Close();
文件操作時,防止內存泄漏的方法:
法一:try...finally
法二:using(){ }
案例:
private void btnSave_Click(object sender, EventArgs e)
{
FileStream fs = null;
try
{
//創建流
fs = new FileStream("aaa.txt", FileMode.Create);
//把文本框的字符串,變成1010101二進制byte[]
byte[] aaa = System.Text.Encoding.Default.GetBytes(txt.Text);
//寫入流
fs.Write(aaa, 0, aaa.Length);
}
finally
{
//關閉流
if (fs != null)
{
fs.Close();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
//創建流
using (FileStream fs = new FileStream("aaa.txt", FileMode.Open))
{
//准備一個空的二進制數組,用來接收讀取出來的內容
byte[] aaa = new byte[fs.Length];
//讀取流
fs.Read(aaa, 0, aaa.Length);
//把二進制轉為字符串
txt.Text = System.Text.Encoding.Default.GetString(aaa);
//關閉流
fs.Close();
}
}
對於文本(字符串)形式的文件流可以使用StreamWriter和StreamReader來簡化操作。
1.創建流
FileStream fs = new FileStream("bbb.txt",FileMode.Create);
//FileStream fs = new FileStream("bbb.txt",FileMode.Open);
2.套讀取器或寫入器。
StreamWriter writer = new StreamWriter(fs);
//StreamReader reader = new StreamReader(fs);
3.使用讀取器或寫入器對文件流進行操作。
writer.Writer("字符串");
//string s = reader.ReadToEnd();
4.關閉讀取器和文件流。
writer.Close();
//reader.Close();
fs.Close();
對於文本(字符串)形式的文件還可以再簡化。——不用寫流的創建,關閉,直接使用流的讀取器和寫入器
private void button4_Click(object sender, EventArgs e)
{
StreamWriter writer = new StreamWriter("ccc.txt",true, Encoding.Default);
writer.Write(txt.Text);
writer.Close();
}
private void button5_Click(object sender, EventArgs e)
{
StreamReader reader = new StreamReader("ccc.txt",Encoding.Default);
txt.Text = reader.ReadToEnd();
reader.Close();
}
新建文本文檔:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private string _FileName="";
private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)
{
txt.Text = "";
_FileName = "";
}
private void 打開OToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult result = open.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
_FileName = open.FileName;
StreamReader reader = null;
try
{
reader = new StreamReader(_FileName, Encoding.Default);
txt.Text = reader.ReadToEnd();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (reader != null)
{
reader.Close();
}
}
}
}
private void 另存為AToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveAsFile();
}
private void SaveAsFile()
{
DialogResult result = save.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
_FileName = save.FileName;
SaveFile();
}
}
private void SaveFile()
{
StreamWriter writer = null;
try
{
writer = new StreamWriter(_FileName, false, Encoding.Default);
writer.Write(txt.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (writer != null)
{
writer.Close();
}
}
}
private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
{
if (_FileName.Trim().Length == 0) //新建的還沒有保存過的
{
SaveAsFile();
}
else //打開的或者已經保存過的
{
SaveFile();
}
}
private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void 全選AToolStripMenuItem_Click(object sender, EventArgs e)
{
txt.SelectAll();
}
private void 剪切XToolStripMenuItem_Click(object sender, EventArgs e)
{
txt.Cut();
}
private void 粘貼PToolStripMenuItem_Click(object sender, EventArgs e)
{
txt.Paste();
}
private void 復制CToolStripMenuItem_Click(object sender, EventArgs e)
{
txt.Copy();
}
private void 字體ToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult result = font.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
txt.Font = font.Font;
}
}
private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
}
}
控件的動態生成與操作:
事件三要素:事件源,事件數據,事件處理程序
//sender-事件源,EventArgs-事件數據,函數體就是處理程序
private void button1_Click(object sender, EventArgs e)
{
Button btn = sender as Button; //把事件源具像化。
MessageBox.Show(btn.Text); //顯示事件源的文本。
}
多按鈕自動生成(模擬掃雷系統):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 計算器去
{
public partial class 多按鈕操作 : Form
{
public 多按鈕操作()
{
InitializeComponent();
}
private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
{
}
private void 多按鈕操作_Load(object sender, EventArgs e)
{
Shezhitablelayout();
Addbutton();
}
private void Addbutton()
{
Random rand=new Random ();
for(int i=1; i<401;i++)
{
Button btn=new Button ();
btn.Text = i.ToString();
btn.Dock = DockStyle.Fill;
tableLayoutPanel1.Controls.Add(btn);
if (rand.Next(100) % 5 == 0)
{
btn.Tag = 10;
}
else if (rand.Next(100) % 7 == 0)
{
btn.Tag = 50;
}
else if (rand.Next(100) % 9 == 0)
{
btn.Tag = 100;
}
else { btn.Tag = 0; }
btn.Click += btn_Click;
}
}
void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
int shu = (int)btn.Tag;
if (shu != 0)
{
btn.BackColor = Color.Red;
btn.ForeColor = Color.Yellow;
btn.Text = btn.Tag.ToString();
}
btn.Enabled = false;
}
private void Shezhitablelayout()
{
tableLayoutPanel1.ColumnStyles.Clear();//清理原來的列
tableLayoutPanel1.ColumnCount = 20;//設置新的列(這里的20指的是列數)
for (int i = 0; i < 20; i++)//循環20次,編輯列的屬性
{
ColumnStyle style = new ColumnStyle(SizeType.Percent, 5);
//列的屬性,括號中第一個數Percent為列按百分比實現寬,第二個數為這個寬占總體的5%
tableLayoutPanel1.ColumnStyles.Add(style);//添加列
}
tableLayoutPanel1.RowStyles.Clear();//清理原來的行
tableLayoutPanel1.RowCount = 20;//設置新的行(這里的20指的是行數)
for (int i = 0; i < 20; i++)//循環20次,編輯行的屬性
{
RowStyle style = new RowStyle(SizeType.Percent, 5);
//列的屬性,括號中第一個數Percent為行按百分比實現高,第二個數為這個高占總體的5%
tableLayoutPanel1.RowStyles.Add(style);//添加行
}
}
}
}
加載數據庫中的數據,如果內容非常多,就顯示出滾動條。類似於QQ好友列表的效果。
1.先放一個Panel在窗體中Dock布局一下。
2.在這個Panel里面放一個FlowLayoutPanel,設置它從上到下流式布局。
3.外面的Panel需設置AutoScroll=true .超出范圍就顯示滾動條。**
(AutoScroll指示控件內容大於它的可見區域時是否自動顯示滾動條)
4.里面的FlowLayoutPanel,設置它Dock=Top,AutoSize=true
(AutoSize指控件是否自動調節自身的大小以適應其內容的大小)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DA;
using Data;
namespace WindowsFormsApplication1
{
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
private void Form5_Load(object sender, EventArgs e)
{
flowLayoutPanel1.Controls.Clear();
List<CarData> list = new CarDA().Select();
foreach (CarData data in list)
{
CheckBox cb = new CheckBox();
cb.Text = data.Name;
cb.Tag = data.Code;
cb.Width = 200;
cb.Appearance = Appearance.Button;
flowLayoutPanel1.Controls.Add(cb);
}
}
}
}
窗體類型:(重,0515AM,不熟)
SDI MDI
單文檔窗體界面,多文檔窗體界面
一、單文檔窗體界面:
有一個主窗體,其它的窗體是輔窗體和對話框。
主窗體一旦關掉,整個程序全部結束。
案例一:如何做登錄?
1.確定好主窗體。在Program.cs文件中的Main函數,使用Application.Run()啟動主窗體。
Application.Run(new Main());
2.做一個登錄窗體。
登錄驗證完成后,不要關閉窗體,也不要顯示主窗體。只需要給this.DialogResult賦個值即可。
private void button1_Click(object sender, EventArgs e)
{
//驗證用戶名和密碼是否正確
if (textBox1.Text == "aaa" && textBox2.Text == "bbb")
{
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
else
{
textBox1.Text = "";
textBox2.Text = "";
}
}
3.在Program.cs的Main函數中,在Application.Run()運行主窗體之前,啟動登錄窗體(用對話框的形式啟動)
如果對話框返回成功的標識時,就運行下面的Application.Run();
Form1 f = new Form1();
DialogResult result = f.ShowDialog();
if (result == DialogResult.OK)
{
Application.Run(new Main());
}
二、多文檔窗體界面:
一個父窗體,里面包含多個子窗體。子窗體無法移到窗體外面,父窗體關掉子窗體全部關閉。
1.確定父窗體。設置父窗體的屬性:IsMdiParent = true
2.做一個子窗體。
3.在窗體的代碼中,實例化子窗體。
4.設置子窗體的屬性:MdiParent,設置成父窗體對象
ChildForm f = new ChildForm();
f.MdiParent = this; //這里的this代表的就是父窗體對象。
5.顯示子窗體
f.Show();
父窗體中的重要屬性:
IsMdiParent - 是否是父窗體 bool
MdiChildren - 所有的子窗體的集合。 Form[]
ActiveMdiChild - 當前正在頂層的子窗體。 Form
案例一:使用菜單添加多個子窗體,關閉所有子窗體,關閉當前子窗體。
案例二:只生成一個子窗體。如果已經有了一個子窗體的話,就不再添加新的子窗體。
