含义:
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程 ,桌面应用程序 基于winforms开发。
创建winform项目
WinForm项目结构
(1)引用:包括所有的系统库文件的引用依赖
(2)App.config:当前项目的配置文件
(3)Form1.cs:当前窗体的对象
1. 查看form窗口代码 方式 在窗体右键 查看代码
2.partial修饰的类,在编译的时候,会统一编译成一个类。
3.
Form1.cs 手动写窗体代码区域
- Form1.Designer.cs:自动生成窗体代码区域
- Form1.resx:当前窗体的资源文件(图片、图标、资源等)
4. winform 中 以控件来组成窗体的元素 分为可视化控件 和 功能性控件
可视化控件:手动拖动控件到窗体中 可显示其外观和位置
功能性控件: 手动拖动控件到窗体中 不显示外观 可以使用其功能
控件的位置:视图 --工具箱
5. 控件包含 属性和事件
6. 属性查看方式
窗体相关的属性
1、常用属性
(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。
(2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。
(3)StartPosition属性:用来获取或设置运行时窗体的起始位置。
(4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。
(5)Width属性:用来获取或设置窗体的宽度。
(6)Height属性:用来获取或设置窗体的高度。
(7)Left属性:用来获取或设置窗体的左边缘的x坐标(以像素为单位)。
(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。
(9)ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true时将显示控制框,值为false时不显示控制框。
(10)MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值
为 true时显示最大化按钮,值为false时不显示最大化按钮。
(11)MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。值
为 true时显示最小化按钮,值为false时不显示最小化按钮。
(12)AcceptButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Enter 键时就相当于单击了窗体上的该按钮。
(13)CancelButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Esc 键时就相当于单击了窗体上的该按钮。
(14)Modal 属性:该属性用来设置窗体是否为有模式显示窗体。如果有模式地显示该窗体,该属性值为
true;否则为 false。当有模式地显示窗体时,只能对模式窗体上的对象进行输入。必须隐藏或关闭模式窗
体(通常是响应某个用户操作),然后才能对另一窗体进行输入。有模式显示的窗体通常用做应用程序中
的对话框。
(15)ActiveControl属性:用来获取或设置容器控件中的活动控件。窗体也是一种容器控件。
(16)ActiveMdiChild属性:用来获取多文档界面(MDI)的当前活动子窗口。
(17)AutoScroll 属性:用来获取或设置一个值,该值指示窗体是否实现自动滚动。如果此属性值设置为
true,则当任何控件位于窗体工作区之外时,会在该窗体上显示滚动条。另外,当自动滚动打开时,窗体
的工作区自动滚动,以使具有输入焦点的控件可见。
(18)BackColor属性:用来获取或设置窗体的背景色。
(19)BackgroundImage属性:用来获取或设置窗体的背景图像。
(20)Enabled 属性:用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。如果控件可
以对用户交互作出响应,则为 true;否则为false。默认值为true。
(21)Font属性:用来获取或设置控件显示的文本的字体。
(22)ForeColor属性:用来获取或设置控件的前景色。
(23)IsMdiChild属性:获取一个值,该值指示该窗体是否为多文档界面(MDI)子窗体。值为 true时,
是子窗体,值为false时,不是子窗体。
(24)IsMdiContainer 属性:获取或设置一个值,该值指示窗体是否为多文档界面(MDI)中的子窗体的
容器。值为true时,是子窗体的容器,值为false时,不是子窗体的容器。
(25)KeyPreview属性:用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体
是否将接收该事件。值为true时,窗体将接收按键事件,值为false时,窗体不接收按键事件。
(26)MdiChildren属性:数组属性。数组中的每个元素表示以此窗体作为父级的多文档界面(MDI)子窗
体。
(27)MdiParent属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。
(28)ShowInTaskbar属性:用来获取或设置一个值,该值指示是否在Windows任务栏中显示窗体。
(29)Visible属性:用于获取或设置一个值,该值指示是否显示该窗体或控件。值为true
时显示窗体或控件,为 false时不显示。
(30)Capture属性:如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的范围内。
windows程序的事件机制
1.什么是事件?
事件:现实中要做的或者已发生事情。
用户和windows与控件交互的“桥梁”,用来响应用户的各种操作 (点击事件,用户输入文本框等)
1. 事件的3要素 事件的目标 事件属性 事件执行程序
事件的目标 :交互的控件对象
事件属性:事件目标和用户交互的不同状态
事件执行程序:事件目标和用户时执行的结果
2、事件绑定方式
1.控件绑定法:找到对应控件事件属性 填入对应事件执行程序名称 在事件执行程序中完成对应逻辑
2.自定义事件方法和绑定事件方法(用于代码法创建控件时使用)
3.双击事件目标 自动生成控件的默认事件绑定
12 适合静态控件的事件绑定 3适合动态控件事件绑定
3.常用窗口事件
(1)Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。
(2)Activated事件:该事件在窗体激活时发生。
(3)Deactivate事件:该事件在窗体失去焦点成为不活动窗体时发生。
(4)Resize事件:该事件在改变窗体大小时发生。
(5)Paint事件:该事件在重绘窗体时发生。
(6)Click事件:该事件在用户单击窗体时发生。
(7)DoubleClick事件:该事件在用户双击窗体时发生。
(8)Closed事件:该事件在关闭窗体时发生。
3.常用控件
label
Label控件是System.Windows.Forms.Label 类提供的控件。
作用:主要用来提供其他控件的描述文字。
1、常用属性:
(1)Text属性:用来设置或返回标签控件中显示的文本信息。
(2)AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取值为 true时,控件将自动调整到刚好能容纳文本时的大小,取值为false时,控件的大小为设计时的大小。默认值为false。
(3)Anchor 属性:用来确定此控件与其容器控件的固定关系的。所谓容器控件指的是这样一种情况:往往在控件之中还有一个控件,例如最典型的就是窗体控件中会包含很多的控件,像标签控件、文本框等。
(4)BackColor属性:
用来获取或设置控件的背景色。当该属性值设置为 Color.Transparent 时,标签将透明显示,即背景色不再显示出来。
(5)BorderStyle 属性:用来设置或返回边框。有三种选择:BorderStyle.None 为无边框(默认),BorderStyle.FixedSingle 为固定单边框,BorderStyle.Fixed3D 为三维边框。边框效果如图 9-8 所示。
(6)TabIndex属性:用来设置或返回对象的Tab键顺序。
(7)Enabled 属性:用来设置或返回控件的状态。值为 true 时允许使用控件,值为 false 时禁止使用控件
button
Button控件是System.Windows.Forms.Button 类提供的控件。
作用:最常使用的就是编写处理按钮的Click事件及MouseEnter事件代码
1、常用属性
Button 控件也具有许多如 Text、ForeColor 等的常规属性,此处不再介绍,只介绍该控件有特色的属性。以后介绍的控件也采用同样的方法来处理。
(1)DialogResult属性:当使用ShowDialog方法显示窗体时,可以使用该属性设置当用户按了该按钮后,
ShowDialog方法的返回值。值有:OK、Cancel、Abort、Retry、Ignore、Yes、No等。
(2)Image属性:用来设置显示在按钮上的图像。
(3)FlatStyle属性:用来设置按钮的外观
2、常用事件:
(1)Click事件:当用户用鼠标左键单击按钮控件时,将发生该事件。
(2)MouseDown事件:当用户在按钮控件上按下鼠标按钮时,将发生该事件。
(3)MouseUp事件:当用户在按钮控件上释放鼠标按钮时,将发生该事件。
TextBox
TextBox控件是System.Windows.Forms.TextBox 类提供的控件。(文本输入框)
提供了文本输入和编辑的功能
1、主要属性:
(1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text属性来获得文本框的当前内容。
(2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符数。
(3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。
(4)HideSelection属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为 false将依旧以选中的方式显示。
(5)ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写。
(6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。
(7) ScrollBars属性: 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。
注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,
水平滚动条将不起作用
(8)SelectionLength属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。
(9)SelectionStart属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的位置为0,第二个字符的位置为1,依此类推。
(10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。
(11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在 Lines数组的一个元素中。
(12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。
(13)TextLength属性:用来获取控件中文本的长度。
(14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。
2、常用方法:
(1)AppendText方法:把一个字符串添加到文件框中文本的后面,调用的一般格式如下:
文本框对象.AppendText(str)
参数 str是要添加的字符串。
(2)Clear方法:从文本框控件中清除所有文本。调用的一般格式如下:
文本框对象.Clear()该方法无参数。
(3)Focus方法:是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如
下:
文本框对象.Focus()该方法无参数。
(4)Copy方法:将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:
文本框对象.Copy()该方法无参数。
(5)Cut方法:将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:
文本框对象.Cut()该方法无参数。
(6)Paste方法:用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:
文本框对象.Paste()该方法无参数。
(7)Undo 方法:撤销文本框中的上一个编辑操作。调用的一般格式如下:
文本框对象.Undo()该方法无参数。
(8)ClearUndo方法:从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用
程序的状态,可以使用此方法防止重复执行撤销操作。调用的一般格式如下:
文本框对象.ClearUndo()该方法无参数。
(9)Select方法:用来在文本框中设置选定文本。调用的一般格式如下:
文本框对象.Select(start,length)
该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位
置,第二个参数length用来设定要选择的字符数。
(10)SelectAll方法:用来选定文本框中的所有文本。调用的一般格式如下:
文本框对象.SelectAll()该方法无参数。
3、常用事件:
(1)GotFocus事件:该事件在文本框接收焦点时发生。
(2)LostFocus事件:该事件在文本框失去焦点时发生。
(3)TextChanged事件:该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。
MessageBox.Show 提示框使用
Message.Show(Text,Title,nType,MessageBoxlcon);
参数1:弹出框要显示的内容
参数2:弹出框的标题
参数3:也可写作MessageBoxButtons,弹出框的按钮格式
参数4:弹出框的图标样式
注意: 4个参数除了Text外都可以省略,Text也可以用""输出无内容提示框
DialogResult aa = MessageBox.Show("Test","aa",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button2);
if (aa == DialogResult.OK)
{
Console.WriteLine("123");
}
if (aa == DialogResult.Cancel)
{
Console.WriteLine("321");
}
4.设计实例:登录注册
2、常用方法
下面介绍一些窗体的最常用方法。
(1)Show方法:该方法的作用是让窗体显示出来,其调用格式为:
窗体名.Show();
其中窗体名是要显示的窗体名称。
(2)Hide方法:该方法的作用是把窗体隐藏出来,其调用格式为:
窗体名.Hide();
其中窗体名是要隐藏的窗体名称。
(3)Refresh方法:该方法的作用是刷新并重画窗体,其调用格式为:
窗体名.Refresh();
其中窗体名是要刷新的窗体名称。
(4)Activate方法:该方法的作用是激活窗体并给予它焦点。其调用格式为:
窗体名.Activate();
其中窗体名是要激活的窗体名称。
(5)Close方法:该方法的作用是关闭窗体。其调用格式为:
窗体名.Close();
其中窗体名是要关闭的窗体名称。
(6)ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为:
窗体名.ShowDialog();
5.Form容器controls属性
//获取窗体对象中 子控件的个数
Console.WriteLine(this.Controls.Count);
//foreach (Button item in this.Controls)
//{
// Console.WriteLine(item);
// item.BackColor = Color.Red;
//}
// Control 是所有可视化控件的基类
//foreach (Control item in this.Controls)
//{
// Console.WriteLine(item);
// item.BackColor = Color.Red;
//}
//foreach (Control item in this.Controls)
//{
// Console.WriteLine(item);
// if (item is Button)
// {
// item.BackColor = Color.Red;
// }
//}
6.panel 容器控件
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 WindowsFormsApp3
{
public partial class panel : Form
{
private object CurrentCount;
public panel()
{
InitializeComponent();
Console.WriteLine(this.Controls.Count);
//查看Panel是否是子控件
//foreach (var item in this.Controls)
//{
// if (item is Panel)
// {
// Console.WriteLine("item是Panel");
// }
//}
//把窗体容器中的按钮变色
//foreach (Control item in this.Controls)
//{
// if (item is Button)
// {
// item.BackColor = Color.Yellow;
// }
//}
//把panel1中的按钮变色
//foreach (Control item in this.panel1.Controls)
//{
// item.BackColor = Color.Blue;
//}
案例:设计一个包含10个按钮的panls 然后根据 让偶数位置元素背景色变化
///
CreatButton();
for (int i = 0; i < this.panel2.Controls.Count; i++)
{
if (i % 2 == 0)
{
this.panel2.Controls[i].BackColor = Color.Red;
}
}
CreatButton1();
}
public void CreatButton()
{
for (int i = 0; i < 10; i++)
{
Button button = new Button();
button.Location = new Point(i * 50, 0);
button.Size = new Size(50, 50);
button.Text = i.ToString();
this.panel2.Controls.Add(button);
}
}
public void CreatButton1()
{
for (int i = 0; i < 10; i++)
{
Button button = new Button();
button.Location = new Point(i * 50, 0);
button.Size = new Size(50, 50);
button.Text = i.ToString();
button.Click += ButtonClick;
button.Tag = i;
this.panel3.Controls.Add(button);
}
}
//案例:设计一个包含10个按钮的panls 然后根据 点击某个按钮 让颜色变红 其他还原本身
public void ButtonClick(object sender, EventArgs e)
{
}
//创建5个按钮 然后删除
public void button1_Click(object sender, EventArgs e)
{
//创建5个按钮到按钮区中
for (int i = 0; i < 5; i++)
{
Button buttonTemp1 = new Button();
buttonTemp1.Location = new Point(50 * i, 0);
buttonTemp1.Name = "buttonTemp1";
buttonTemp1.Size = new Size(50, 50);
buttonTemp1.Text = "按钮1";
this.panel4.Controls.Add(buttonTemp1);
}
}
private void button2_Click(object sender, EventArgs e)
{
//清除所有控件
// this.panel4.Controls.Clear();
//移除某个控件
this.panel4.Controls.RemoveAt(0);
}
}
}
7.groupBox 容器控件 类同 panel
8.控件布局属性 Anchor和Dock
/* 控件的两个通用的布局属性: Anchor: 锚定,将控件固定于某个位置 Dock: 停靠,将控件停靠在一侧或中央 1.Anchor 为 Top | Right 与父窗口的上边距Top 和右边距 Right 保持不变 2.锚定于左下角 Anchor = Left | Bottom 3.锚定于右下角 Anchor = Right | Bottom 4.锚定于上边缘、水平拉伸 Anchor = Top | Left | Right 5.锚定于上边缘、水平居中 、 Anchor = Top 6.拉伸 Anchor = Top | Right | Bottom | Left 7. 居中 Anchor: None */ //Dock: 停靠,将控件停靠在一侧或中央 //上 Top //下 Bottom //左 Left //右 Right //中 Fill //无 None // 注意:当设置 Dock 属性时,Anchor属性无效 //布局的嵌套 /* 演示:Panel, 面板 1 添加一个Panel,停靠在上侧 2 添加一个Panel,依靠在左侧 3 添加一个PictureBox,依靠在中央 依靠于左右两侧时,可以调整宽度;上下两侧时,可以调整高度。 */
9. CheckBox和RadioButton
同一个容器里的RadioButton之间是互斥的;不同容器间是不相关的。
private void radioButton1_Click(object sender, EventArgs e)
{
isChecked2 = false;
if (isChecked1==false)
{
MessageBox.Show(radioButton1.Text);
isChecked1 = true;
}
}
private void radioButton2_Click(object sender, EventArgs e)
{
isChecked1 = false;
if (isChecked2 == false)
{
MessageBox.Show(radioButton2.Text);
isChecked2 = true;
}
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked ==true)
{
MessageBox.Show(radioButton1.Text);
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked == true)
{
MessageBox.Show(radioButton2.Text);
}
}
CheckBox
//多选
List<CheckBox> listCheckBox = new List<CheckBox>();
public Form1()
{
InitializeComponent();
listCheckBox.Add(checkBox1);
listCheckBox.Add(checkBox2);
listCheckBox.Add(checkBox3);
foreach (CheckBox item in listCheckBox)
{
item.CheckedChanged += Ck_CheckedChanged;
}
}
private void quanXuancheckBox_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkBoxQ = sender as CheckBox;
if (checkBoxQ.Checked ==true)
{
foreach (CheckBox ck in listCheckBox)
ck.Checked = true;
}
else
{
foreach (CheckBox ck in listCheckBox)
ck.Checked = false;
}
}
private void Ck_CheckedChanged(object sender, EventArgs e)
{
CheckBox c = sender as CheckBox;
if (c.Checked == true)
{
foreach (CheckBox ch in listCheckBox)
{
if (ch.Checked == false)
return;
}
quanXuancheckBox.Checked = true;
}
else
{
quanXuancheckBox.Checked = false;
}
}
//danxuan
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
RadioButton radioButton1 = sender as RadioButton;
if (radioButton1.Checked == true) {
MessageBox.Show($"你是{radioButton1.Text}");
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
RadioButton radioButton1 = sender as RadioButton;
if (radioButton1.Checked == true)
{
MessageBox.Show($"你是{radioButton1.Text}");
}
}
}
}
10.listbox
namespace winform3
{
/*
ListBox是WinForm中的 列表 控件,它提供了一个项目列表(一组数据项),
用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,、
使用户可以滚动查阅所有选项.
*/
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 WindowsFormsApp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//获取listBox选项个数
Console.WriteLine(listBox1.Items.Count);
// 获取listBox选项内容
foreach (var item in listBox1.Items)
{
Console.WriteLine(item);
}
//修改
listBox1.Items[0] = 100;
//动态添加元素
listBox1.Items.Add(1000);
//移除
listBox1.Items.RemoveAt(0);
//清空
// listBox1.Items.Clear();
//包含某个元素
Console.WriteLine(listBox1.Items.Contains(1000));
Console.WriteLine(comboBox1.Items.Count);
//其他同上
}
//单选移动
private void button5_Click(object sender, EventArgs e)
{
// Console.WriteLine(listBox1.SelectedItem);
if (listBox1.SelectedItem == null)
{
MessageBox.Show("未选中");
}
else {
listBox2.Items.Add(listBox1.SelectedItem);
listBox1.Items.Remove(listBox1.SelectedItem);
}
}
//多选移动 selectionMode属性 控制 多选操作
private void button6_Click(object sender, EventArgs e)
{
if (listBox2.SelectedItems.Count <= 0)
{
MessageBox.Show("未选中");
}
else {
foreach (var item in listBox2.SelectedItems)
{
listBox1.Items.Add(item);
}
// 0 - 3
// 1 - 2
// 2 - 1
for (int i = listBox2.SelectedItems.Count; i >0 ; i--)
{
listBox2.Items.Remove(listBox2.SelectedItems[i-1]);
}
}
}
//listBox1属性更改时
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(listBox1.SelectedItem.ToString());
}
}
namespace winform3
{
/*
ListBox是WinForm中的 列表 控件,它提供了一个项目列表(一组数据项),
用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,、
使用户可以滚动查阅所有选项.
*/
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 WindowsFormsApp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//获取listBox选项个数
Console.WriteLine(listBox1.Items.Count);
// 获取listBox选项内容
foreach (var item in listBox1.Items)
{
Console.WriteLine(item);
}
//修改
listBox1.Items[0] = 100;
//动态添加元素
listBox1.Items.Add(1000);
//移除
listBox1.Items.RemoveAt(0);
//清空
// listBox1.Items.Clear();
//包含某个元素
Console.WriteLine(listBox1.Items.Contains(1000));
Console.WriteLine(comboBox1.Items.Count);
//其他同上
}
//单选移动
private void button5_Click(object sender, EventArgs e)
{
// Console.WriteLine(listBox1.SelectedItem);
if (listBox1.SelectedItem == null)
{
MessageBox.Show("未选中");
}
else {
listBox2.Items.Add(listBox1.SelectedItem);
listBox1.Items.Remove(listBox1.SelectedItem);
}
}
//多选移动 selectionMode属性 控制 多选操作
private void button6_Click(object sender, EventArgs e)
{
if (listBox2.SelectedItems.Count <= 0)
{
MessageBox.Show("未选中");
}
else {
foreach (var item in listBox2.SelectedItems)
{
listBox1.Items.Add(item);
}
// 0 - 3
// 1 - 2
// 2 - 1
for (int i = listBox2.SelectedItems.Count; i >0 ; i--)
{
listBox2.Items.Remove(listBox2.SelectedItems[i-1]);
}
}
}
//listBox1属性更改时
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(listBox1.SelectedItem.ToString());
}
}
11.comboBox
namespace winfromComBox4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.Text = "请选择";
comboBox1.Items.Add("1");
comboBox1.Items.Add("2");
comboBox1.Items.Add("3");
comboBox1.Items.Add("4");
comboBox1.Items.Add("5");
comboBox1.Items.Add("6");
comboBox1.Items.Insert(1, "wangwu");
//总结:comboBox1.Items和 listBox1.Items 都是集合 而且都是相同类型 所以方法和属性通用
// comboBox1.SelectedIndex = 0;
//this.comboBox1.SelectedItem.ToString();//当前选择的Item的显示值
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//MessageBox.Show("Test");
MessageBox.Show(this.comboBox1.SelectedItem.ToString());//当前选择的Item的显示值);
}
}
12.PictureBox
PictureBox
在窗体显示图片
属性:
Image:设置图片,使用项目资源文件的方式导入图片.
SizeMode:设置图片的显示模式,StretchImage图片随控件大小平铺.Zoom按照等比例缩放随控件大小平铺.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;
/*
https://img0.baidu.com/it/u=2642223955,2176778396&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500
https://pic.616pic.com/photoone/00/03/96/618ce5441d6a75161.jpg
https://img0.baidu.com/it/u=3059223957,798715771&fm=253&fmt=auto&app=138&f=JPEG?w=667&h=500
*/
namespace zhiyou_winform_PictureBox
{
public partial class Form1 : Form
{
//创建 保存图片的list数组
private List<string> picUrlList = new List<string>();
//记录 当前图片的位置(索引值)
private int count =0;
public Form1()
{
InitializeComponent();
//绝对路径
//picUrlList.Add(@"C:\Users\renre\Desktop\CSharp\winform1\zhiyou_winform_PictureBox\Resources\1.jpg");
//picUrlList.Add(@"C:\Users\renre\Desktop\CSharp\winform1\zhiyou_winform_PictureBox\Resources\2.jpg");
//picUrlList.Add(@"C:\Users\renre\Desktop\CSharp\winform1\zhiyou_winform_PictureBox\Resources\3.jpg");
//picUrlList.Add(@"C:\Users\renre\Desktop\CSharp\winform1\zhiyou_winform_PictureBox\Resources\4.jpg");
//相对路径
//保存图片的本地路径
picUrlList.Add(@"..\..\resources\1.jpg");
picUrlList.Add(@"..\..\resources\2.jpg");
picUrlList.Add(@"..\..\resources\3.jpg");
picUrlList.Add(@"..\..\resources\4.jpg");
}
//下一张
private void button1_Click(object sender, EventArgs e)
{
//查看项目的debug目录
//C:\Users\renre\Desktop\CSharp\winform1\zhiyou_winform_PictureBox\bin\Debug
string path = Application.StartupPath;
Console.WriteLine(path);
if (picUrlList.Count-1 == count)
{
count = 0;
// pictureBox1.ImageLocation = picUrlList[count];
pictureBox1.Image = Image.FromFile(picUrlList[count]);
}
else
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
//方式1
// pictureBox1.ImageLocation = picUrlList[count];
//方式2
pictureBox1.Image = Image.FromFile(picUrlList[count]);
}
count++;
}
//上一张
private void button2_Click(object sender, EventArgs e)
{
if (count<0)
{
count = picUrlList.Count-1;
// pictureBox1.ImageLocation = picUrlList[count];
pictureBox1.Image = Image.FromFile(picUrlList[count]);
}
else
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
//方式1
// pictureBox1.ImageLocation = picUrlList[count];
//方式2
pictureBox1.Image = Image.FromFile(picUrlList[count]);
}
count--;
}
}
}