C# WinForm是一种GUI应用程序框架,它允许开发人员使用各种控件来创建丰富的用户界面。以下是一些C# WinForm中常见的界面控件:这些界面控件在C# WinForm应用程序开发中非常常见,开发人员可以借助它们来快速创建各种类型的用户界面。

  • Button:按钮控件,用于添加按钮到用户界面以执行操作。
  • Label:标签控件,用于在用户界面上显示文本。
  • TextBox:文本框控件,允许用户输入文本信息。
  • ComboBox:组合框控件,用于在下拉列表中显示选项。
  • ListBox:列表框控件,用于在列表中显示多个选项。
  • RadioButton:单选按钮控件,可供用户进行单选选择。
  • CheckBox:复选框控件,可供用户进行多选选择。
  • DateTimePicker:日期时间选择控件,允许用户选择日期和时间。
  • ProgressBar:进度条控件,用于显示操作进度。

按钮与编辑框的使用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
int start = int.Parse(textBox1.Text);
int end = int.Parse(textBox2.Text); for (int x = start; x < end; x++)
{
progressBar1.Value += 1;
Thread.Sleep(100);
}
}
}
}

listView

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.Threading; namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
ColumnHeader Uid = new ColumnHeader(); Uid.Text = "UID";
Uid.Width = 100;
Uid.TextAlign = HorizontalAlignment.Left;
this.listView1.Columns.Add(Uid); ColumnHeader Uname = new ColumnHeader();
Uname.Text = "UNAME";
Uname.Width = 100;
Uname.TextAlign = HorizontalAlignment.Left;
this.listView1.Columns.Add(Uname); ColumnHeader Uage = new ColumnHeader();
Uage.Text = "UAGE";
Uage.Width = 100;
Uage.TextAlign = HorizontalAlignment.Left;
this.listView1.Columns.Add(Uage);
} private void button1_Click(object sender, EventArgs e)
{
// tianjia shuju
this.listView1.BeginUpdate(); //数据更新,UI暂时挂起
this.listView1.Items.Clear(); //只移除所有的项。
for (int x = 0; x < 100; x++)
{
ListViewItem lv = new ListViewItem();
lv.ImageIndex = x;
lv.Text = "UUID -> " + x; lv.SubItems.Add("第2列");
lv.SubItems.Add("第3列" + x + "行");
this.listView1.Items.Add(lv);
}
this.listView1.EndUpdate(); //结束数据处理,UI界面一次性绘制。
}
}
}

MID 窗体设计:

1.首先插入新的子窗体form1,并设置IsMdiContainer = True 属性。

2.zi chuang ti bing she zhi ta men de fu chuang ti

form1.cs

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(); frm2.MdiParent = this; // pai lie
LayoutMdi(MdiLayout.TileHorizontal);
}
}
}

ji suan qi

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 练习25
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 0;
} private void button1_Click(object sender, EventArgs e)
{
try
{
int n1 = Convert.ToInt32(textBox1.Text.Trim());
int n2 = Convert.ToInt32(textBox2.Text.Trim());
string oper = comboBox1.SelectedItem.ToString();
switch (oper)
{
case "+": label1.Text = (n1 + n2).ToString();
break;
case "-": label1.Text = (n1 - n2).ToString();
break;
case "*": label1.Text = (n1 * n2).ToString();
break;
case "/": label1.Text = (n1 / n2).ToString();
break;
default: MessageBox.Show("请选择正确的操作符");
break;
}
}
catch
{
MessageBox.Show("请输入正确的数字");
}
}
}
}

浏览器控件的使用

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 _03_浏览器控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string text = textBox1.Text;
Uri uri = new Uri("http://"+text);
webBrowser1.Url = uri;
}
}
}

ComboBox 控件

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 _04ComboBox
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//通过代码给下拉框添加数据
comboBox2.Items.Add("张三");
comboBox2.Items.Add("李四");
comboBox2.Items.Add("王五");
} private void button2_Click(object sender, EventArgs e)
{
comboBox2.Items.Clear();
}
}
}

ComboBox 日期时间控件

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 _05日期选择器
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//程序加载的时候 将年份添加到下拉框中
//获得当前的年份
int year = DateTime.Now.Year; for (int i = year; i >= 1949; i--)
{
cboYear.Items.Add(i + "年");
}
}
/// 当年份发生改变的时候 加载月份
private void cboYear_SelectedIndexChanged(object sender, EventArgs e)
{ //添加之前应该清空之前的内容
cboMonth.Items.Clear();
for (int i = 1; i <= 12; i++)
{
cboMonth.Items.Add(i + "月");
}
} /// 当月份发生改变的时候 加载天
private void cboMonth_SelectedIndexChanged(object sender, EventArgs e)
{
cboDays.Items.Clear();
int day = 0;//定义一个变量来存储天数 //获得月份 7月 12
string strMonth = cboMonth.SelectedItem.ToString().Split(new char[] { '月' }, StringSplitOptions.RemoveEmptyEntries)[0];
string strYear = cboYear.SelectedItem.ToString().Split(new char[] { '年' }, StringSplitOptions.RemoveEmptyEntries)[0];
// MessageBox.Show(cboMonth.SelectedItem.ToString());
int year = Convert.ToInt32(strYear);
int month = Convert.ToInt32(strMonth);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: day = 31;
break;
case 2:
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
day = 29;
}
else
{
day = 28;
}
break;
default: day = 30;
break;
} for (int i = 1; i <= day; i++)
{
cboDays.Items.Add(i + "日");
}
}
}
}

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 _06ListBox控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add(1);
listBox1.Items.Add(200000);
} // 遍历选中
private void button1_Click(object sender, EventArgs e)
{
for(int x=0;x<listBox1.Items.Count;x++)
{
if (listBox1.SelectedItems.Contains(listBox1.Items[x]))
{
MessageBox.Show(listBox1.Items[x].ToString());
}
}
}
}
}

实现图片预览: 左面ListBox控件,右面是一个pictureBox控件。

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 _07实现点击更换照片
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //用来存储图片文件的全路径
List<string> list = new List<string>(); private void Form1_Load(object sender, EventArgs e)
{
string[] path = Directory.GetFiles(@"C:\", "*.jpg");
for (int i = 0; i < path.Length; i++)
{
string fileName = Path.GetFileName(path[i]);
listBox1.Items.Add(fileName); //将图片的全路径添加到List泛型集合中
list.Add(path[i]);
//listBox1.Items.Add(path[i]);
}
} /// 双击播放图片
private void listBox1_DoubleClick(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(list[listBox1.SelectedIndex]);
}
}
}

双击播放音乐:

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;
using System.Media; namespace _08双击播放音乐
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//存储音乐文件的全路径
List<string> listSongs = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
string[] path = Directory.GetFiles(@"C:\Music", "*.wav");
for (int i = 0; i < path.Length; i++)
{
string fileName = Path.GetFileName(path[i]);
listBox1.Items.Add(fileName);
//将音乐文件的全路径存到泛型集合中
listSongs.Add(path[i]);
}
} private void listBox1_DoubleClick(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation=listSongs[listBox1.SelectedIndex];
sp.Play();
}
}
}

打开一个txt文件(打开文件对话框): 一个放大了的textbox

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 _10打开对话框
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
//点击弹出对话框
OpenFileDialog ofd = new OpenFileDialog();
//设置对话框的标题
ofd.Title = "请选择要打开的文本";
//设置对话框可以多选
ofd.Multiselect = true;
//设置对话框的初始目录
ofd.InitialDirectory = @"C:\";
//设置对话框的文件类型
ofd.Filter = "文本文件|*.txt|媒体文件|*.wmv|图片文件|*.jpg|所有文件|*.*";
//展示对话框
ofd.ShowDialog(); //获得在打开对话框中选中文件的路径
string path = ofd.FileName;
if (path == "")
{
return;
}
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[1024 * 1024 * 5];
//实际读取到的字节数
int r = fsRead.Read(buffer, 0, buffer.Length); textBox1.Text = Encoding.Default.GetString(buffer, 0, r);
}
}
}
}

保存文件对话框:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _11_保存文件对话框
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "请选择要保存的路径";
sfd.InitialDirectory = @"C:\";
sfd.Filter = "文本文件|*.txt|所有文件|*.*";
sfd.ShowDialog();
//获得保存文件的路径
string path = sfd.FileName;
if (path == "")
{
return;
}
using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = Encoding.Default.GetBytes(textBox1.Text);
fsWrite.Write(buffer, 0, buffer.Length);
}
MessageBox.Show("保存成功");
}
}
}

字体颜色对话框

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 _12_字体和颜色对话框
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// 字体对话框
private void button1_Click(object sender, EventArgs e)
{
FontDialog fd = new FontDialog();
fd.ShowDialog();
textBox1.Font = fd.Font;
} private void button2_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
cd.ShowDialog();
textBox1.ForeColor = cd.Color;
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}

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 _13_Panel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = true;
} private void button2_Click(object sender, EventArgs e)
{
panel1.Visible = false;
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}

简易记事本

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _14_记事儿本应用程序
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//加载程序的时候 隐藏panel
panel1.Visible = false;
//取消文本框的自动换行功能
textBox1.WordWrap = false;
} /// 点击按钮的时候 隐藏panel
private void button1_Click(object sender, EventArgs e)
{
panel1.Visible = false;
} private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
panel1.Visible = true;
} private void 影藏ToolStripMenuItem_Click(object sender, EventArgs e)
{
panel1.Visible = false;
} List<string> list = new List<string>(); /// 打开对话框
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "请选择要打开的文本文件";
ofd.InitialDirectory = @"C:\Users\SpringRain\Desktop";
ofd.Multiselect = true;
ofd.Filter = "文本文件|*.txt|所有文件|*.*";
ofd.ShowDialog(); //获得用户选中的文件的路径
string path = ofd.FileName;
//将文件的全路径存储到泛型集合中
list.Add(path);
//获得了用户打开文件的文件名
string fileName = Path.GetFileName(path);
//将文件名放到ListBox中
listBox1.Items.Add(fileName);
if (path == "")
{
return;
}
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[1024 * 1024 * 5];
int r = fsRead.Read(buffer, 0, buffer.Length);
textBox1.Text = Encoding.Default.GetString(buffer, 0, r);
}
} /// 保存对话框
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = @"C:\Users\SpringRain\Desktop";
sfd.Title = "请选择要保存的文件路径";
sfd.Filter = "文本文件|*.txt|所有文件|*.*";
sfd.ShowDialog(); //获得用户要保存的文件的路径
string path = sfd.FileName;
if (path == "")
{
return;
}
using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = Encoding.Default.GetBytes(textBox1.Text);
fsWrite.Write(buffer, 0, buffer.Length);
}
MessageBox.Show("保存成功");
} private void 自动换行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (自动换行ToolStripMenuItem.Text == "☆自动换行")
{
textBox1.WordWrap = true;
自动换行ToolStripMenuItem.Text = "★取消自动换行";
}
else if (自动换行ToolStripMenuItem.Text == "★取消自动换行")
{
textBox1.WordWrap = false;
自动换行ToolStripMenuItem.Text = "☆自动换行";
}
} private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
{ FontDialog fd = new FontDialog();
fd.ShowDialog();
textBox1.Font = fd.Font;
} private void 颜色ToolStripMenuItem_Click(object sender, EventArgs e)
{
ColorDialog cd = new ColorDialog();
cd.ShowDialog();
textBox1.ForeColor = cd.Color;
} /// 双击打开对应的文件
private void listBox1_DoubleClick(object sender, EventArgs e)
{
//要获得双击的文件所对应的全路径
string path = list[listBox1.SelectedIndex];
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[1024 * 1024 * 5];
int r = fsRead.Read(buffer, 0, buffer.Length); textBox1.Text = Encoding.Default.GetString(buffer, 0, r);
}
}
}
}

音乐选择框

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;
using System.Media;
namespace _01复习
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//用来存储音乐文件的全路径
List<string> listSongs = new List<string>();
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "请选择音乐文件";
ofd.InitialDirectory = @"C:\Users\SpringRain\Desktop\Music";
ofd.Multiselect = true;
ofd.Filter = "音乐文件|*.wav|所有文件|*.*";
ofd.ShowDialog();
//获得我们在文件夹中选择所有文件的全路径
string[] path = ofd.FileNames;
for (int i = 0; i < path.Length; i++)
{
//将音乐文件的文件名加载到ListBox中
listBox1.Items.Add(Path.GetFileName(path[i]));
//将音乐文件的全路径存储到泛型集合中
listSongs.Add(path[i]);
}
} /// 实现双击播放
SoundPlayer sp = new SoundPlayer();
private void listBox1_DoubleClick(object sender, EventArgs e)
{ sp.SoundLocation=listSongs[listBox1.SelectedIndex];
sp.Play();
} /// 点击下一曲
private void button3_Click(object sender, EventArgs e)
{
//获得当前选中歌曲的索引
int index = listBox1.SelectedIndex;
index++;
if (index == listBox1.Items.Count)
{
index = 0;
}
//将改变后的索引重新的赋值给我当前选中项的索引
listBox1.SelectedIndex = index;
sp.SoundLocation = listSongs[index];
sp.Play();
} /// 点击上一曲
private void button2_Click(object sender, EventArgs e)
{
int index = listBox1.SelectedIndex;
index--;
if (index < 0)
{
index = listBox1.Items.Count-1;
}
//将重新改变后的索引重新的赋值给当前选中项
listBox1.SelectedIndex = index;
sp.SoundLocation = listSongs[index];
sp.Play();
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}

标签与随机数:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _05_摇奖机应用程序
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool b = false;
private void button1_Click(object sender, EventArgs e)
{
if (b == false)
{
b = true;
button1.Text = "停止";
Thread th = new Thread(PlayGame);
th.IsBackground = true;
th.Name = "新线程";
// th.
th.Start();
}
else//b==true
{
b = false;
button1.Text = "开始";
}
//PlayGame();
}
private void PlayGame()
{
Random r = new Random();
while (b)
{
label1.Text = r.Next(0, 10).ToString();
label2.Text = r.Next(0, 10).ToString();
label3.Text = r.Next(0, 10).ToString();
}
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}

Socket - client

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket socket;
private void btnStart_Click(object sender, EventArgs e)
{
try
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(txtServer.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text)); socket.Connect(point);
ShowMsg("连接成功"); Thread th = new Thread(Rec);
th.IsBackground = true;
th.Start();
}
catch
{ }
} void Rec()
{
while (true)
{
try
{
byte[] buffer = new byte[1024 * 1024 * 3];
int r = socket.Receive(buffer);
if (buffer[0] == 0)
{
string s = Encoding.UTF8.GetString(buffer, 1, r-1);
ShowMsg(s);
}
else if (buffer[0] == 1)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "所有文件|*.*";
sfd.ShowDialog(this);
string path = sfd.FileName;
using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
fsWrite.Write(buffer, 1, r - 1);
}
MessageBox.Show("保存成功");
}
else
{
ZD();
}
}
catch
{ }
}
} void ZD()
{
for (int i = 0; i < 500; i++)
{
this.Location = new Point(200, 200);
this.Location = new Point(210, 210);
}
} void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
} /// 给服务器发送消息
private void btnSend_Click(object sender, EventArgs e)
{
byte[] buffer = Encoding.UTF8.GetBytes(txtMsg.Text);
socket.Send(buffer);
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}

socket-server

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace Server {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnStart_Click(object sender, EventArgs e)
{
try
{
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Any;//IPAddress.Parse(txtServer.Text); IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text)); socketWatch.Bind(point); ShowMsg("监听成功"); //去厕所蹲坑
socketWatch.Listen(10); //不停的接收客户端的连接
Thread th = new Thread(Listen);
th.IsBackground = true;
th.Start(socketWatch);
}
catch
{ }
} Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
void Listen(object o)
{
Socket socketWatch = o as Socket;
while (true)
{
//循环的接收客户端的连接
Socket socketSend = socketWatch.Accept();
//将客户端的IP地址存储到下拉框中
cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
//将IP地址和这个客户端的Socket放到键值对集合中
dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功"); //客户端连接成功后,就应高接收客户端发来的消息
Thread th = new Thread(Rec);
th.IsBackground = true;
th.Start(socketSend); }
} void Rec(object o)
{
Socket socketSend = o as Socket;
while (true)
{
try
{
byte[] buffer = new byte[1024 * 1024 * 3];
int r = socketSend.Receive(buffer); string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
}
catch
{ }
}
} void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
} private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
} /// 服务器给客户端发送消息
private void btnSend_Click(object sender, EventArgs e)
{
byte[] buffer = Encoding.UTF8.GetBytes(txtMsg.Text);
//获得客户端的ip
string ip = cboUsers.SelectedItem.ToString();
List<byte> list = new List<byte>();
list.Add(0);
list.AddRange(buffer);
byte[] newBuffer = list.ToArray(); dicSocket[ip].Send(newBuffer);
} private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "所有文件|*.*";
ofd.ShowDialog();
txtPath.Text = ofd.FileName;
} private void btnSendFile_Click(object sender, EventArgs e)
{
string path = txtPath.Text;
using (FileStream fsRead = new FileStream(path, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[1024 * 1024 * 3];
int r = fsRead.Read(buffer, 0, buffer.Length);
List<byte> list = new List<byte>();
list.Add(1);
list.AddRange(buffer);
byte[] newBuffer = list.ToArray();
string ip = cboUsers.SelectedItem.ToString();
dicSocket[ip].Send(newBuffer, 0, r+1, SocketFlags.None);
}
} private void btnZD_Click(object sender, EventArgs e)
{
byte[] buffer = new byte[1];
buffer[0] = 2;
string ip = cboUsers.SelectedItem.ToString();
dicSocket[ip].Send(buffer);
} private void button1_Click(object sender, EventArgs e)
{ }
}
}

GDI 绘制登录验证码 需要一个pictureBox1控件

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 使用GDI绘制验证码
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// 点击更换验证码
private void pictureBox1_Click(object sender, EventArgs e)
{
Random r = new Random();
string str = null;
for (int i = 0; i < 5; i++)
{
int rNumber = r.Next(0, 10);
str += rNumber;
}
// MessageBox.Show(str);
//创建GDI对象
Bitmap bmp = new Bitmap(150, 40);
Graphics g = Graphics.FromImage(bmp); for (int i = 0; i < 5; i++)
{
Point p = new Point(i * 20, 0);
string[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };
Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green };
g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);
} for (int i = 0; i < 20; i++)
{
Point p1=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
Point p2=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
g.DrawLine(new Pen(Brushes.Green), p1, p2);
} for (int i = 0; i < 500; i++)
{
Point p=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
bmp.SetPixel(p.X, p.Y, Color.Black);
} //将图片镶嵌到PictureBox中
pictureBox1.Image = bmp;
} private void Form1_Load(object sender, EventArgs e)
{ }
}
}

GDI 图形绘制:

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 使用GDI绘制简单的图形
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//一根笔 颜色 一张纸 两点 绘制直线的对象
} private void button1_Click(object sender, EventArgs e)
{
//创建GDI对象
Graphics g = this.CreateGraphics();// new Graphics();
//创建画笔对象
Pen pen = new Pen(Brushes.Red);
//创建两个点
Point p1 = new Point(30, 50);
Point p2 = new Point(250, 250);
g.DrawLine(pen, p1, p2); }
int i = 0;
private void Form1_Paint(object sender, PaintEventArgs e)
{
i++;
label1.Text = i.ToString();
Graphics g = this.CreateGraphics();// new Graphics();
//创建画笔对象
Pen pen = new Pen(Brushes.Red);
//创建两个点
Point p1 = new Point(30, 50);
Point p2 = new Point(250, 250);
g.DrawLine(pen, p1, p2); } private void button2_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen pen=new Pen(Brushes.Yellow);
Size size=new System.Drawing.Size(80,80);
Rectangle rec=new Rectangle(new Point(50,50),size);
g.DrawRectangle(pen,rec);
} private void button3_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen pen=new Pen(Brushes.Blue);
Size size=new System.Drawing.Size(180,180);
Rectangle rec=new Rectangle(new Point(150,150),size);
g.DrawPie(pen, rec, 60, 60);
} private void button4_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.DrawString("百度网盘下载最快", new Font("宋体", 20, FontStyle.Underline), Brushes.Black, new Point(300, 300));
}
}
}

窗体传值:

form1.cs 只有一个 label1 和一个button

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 Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(ShowMsg);
frm2.Show();
} void ShowMsg(string s)
{
label1.Text = s;
}
}
}

form2.cs 一个textbox1 和一个button

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 delegate void DelStr(string s);
public partial class Form2 : Form
{
public DelStr _del; // 子窗口中的del赋值给this._del 父窗体,完成的窗体进程数据传输。
public Form2(DelStr del)
{
this._del = del;
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
// 给父窗体赋值
_del(textBox1.Text);
}
}
}

创建xml

	using System.Xml;

通过代码来创建XML文档
XmlDocument doc = new XmlDocument(); 创建第一个行描述信息,并且添加到doc文档中
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec); 创建根节点
XmlElement books = doc.CreateElement("Books"); 将根节点添加到文档中
doc.AppendChild(books); 给根节点Books创建子节点
XmlElement book1 = doc.CreateElement("Book"); 将book添加到根节点
books.AppendChild(book1); 给Book1添加子节点
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "你好";
book1.AppendChild(name1);

写入一个XML

1、创建一个XML文档对象
XmlDocument doc = new XmlDocument(); 2、创建第一行描述信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); 3、将创建的第一行数据添加到文档中
doc.AppendChild(dec); 4、给文档添加根节点
XmlElement books = doc.CreateElement("Books"); 5、将根节点添加给文档对象
doc.AppendChild(books); 6、给根节点添加子节点
XmlElement book1 = doc.CreateElement("Book");
将子节点book1添加到根节点下
books.AppendChild(book1); 7、给book1添加子节点
XmlElement bookName1 = doc.CreateElement("BookName"); 8、设置标签中显示的文本
bookName1.InnerText = "水浒传";
book1.AppendChild(bookName1); XmlElement author1 = doc.CreateElement("Author");
author1.InnerText = "<authorName>匿名</authorName>";
book1.AppendChild(author1); XmlElement price1 = doc.CreateElement("Price");
price1.InnerXml = "<authorName>匿名</authorName>";
book1.AppendChild(price1); XmlElement des1 = doc.CreateElement("Des");
des1.InnerXml = "好看";
book1.AppendChild(des1); Console.WriteLine("保存成功");
doc.Save("Book.xml");
Console.ReadKey();

追加xml

追加XML文档
XmlDocument doc = new XmlDocument();
XmlElement books;
if (File.Exists("Books.xml"))
{
如果文件存在 加载XML
doc.Load("Books.xml");
获得文件的根节点
books = doc.DocumentElement;
}
else
{
如果文件不存在
创建第一行
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
创建跟节点
books = doc.CreateElement("Books");
doc.AppendChild(books);
} 5、给根节点Books创建子节点
XmlElement book1 = doc.CreateElement("Book");
将book添加到根节点
books.AppendChild(book1); 6、给Book1添加子节点
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "c#开发大全";
book1.AppendChild(name1); XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "110";
book1.AppendChild(price1); XmlElement des1 = doc.CreateElement("Des");
des1.InnerText = "看不懂";
book1.AppendChild(des1); doc.Save("Books.xml");
Console.WriteLine("保存成功");
Console.ReadKey();

读取XML

加载要读取的XML
XmlDocument doc = new XmlDocument();
doc.Load("Books.xml"); 获得根节点
XmlElement books = doc.DocumentElement; 获得子节点 返回节点的集合
XmlNodeList xnl = books.ChildNodes;
foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
Console.ReadKey(); 读取带属性的XML文档
XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
Xpath XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
XmlNodeList xnl = doc.SelectNodes("/Order/Items/OrderItem"); foreach (XmlNode node in xnl)
{
Console.WriteLine(node.Attributes["Name"].Value);
Console.WriteLine(node.Attributes["Count"].Value);
}
Console.ReadKey(); 改变属性的值
XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
XmlNode xn = doc.SelectSingleNode("/Order/Items/OrderItem[@Name='190']");
xn.Attributes["Count"].Value = "200";
xn.Attributes["Name"].Value = "颜世伟";
doc.Save("Order.xml");
Console.WriteLine("保存成功");
XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
XmlNode xn = doc.SelectSingleNode("/Order/Items"); xn.RemoveAll();
doc.Save("Order.xml");
Console.WriteLine("删除成功");
Console.ReadKey(); 获得文档的根节点
xmlelement order = doc.documentelement;
xmlnodelist xnl = order.childnodes;
foreach (xmlnode item in xnl)
{
如果不是items 就continue
if (item[])
{
continue;
}
console.writeline(item.attributes["name"].value);
console.writeline(item.attributes["count"].value);
}
Console.ReadKey();

增删改查:

XMLDocument
#region 对xml文档实现追加的需求
XmlDocument doc = new XmlDocument();
首先判断xml文档是否存在 如果存在 则追加 否则创建一个
if (File.Exists("Student.xml"))
{
加载进来
doc.Load("Student.xml");
追加
获得根节点 给根节点添加子节点
XmlElement person = doc.DocumentElement; XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", "10");
person.AppendChild(student); XmlElement name = doc.CreateElement("Name");
name.InnerXml = "我是新来哒";
student.AppendChild(name); XmlElement age = doc.CreateElement("Age");
age.InnerXml = "18";
student.AppendChild(age); XmlElement gender = doc.CreateElement("Gender");
gender.InnerXml = "女";
student.AppendChild(gender); }
else
{
不存在 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec); XmlElement person = doc.CreateElement("Person");
doc.AppendChild(person); XmlElement student = doc.CreateElement("Student");
student.SetAttribute("studentID", "110");
person.AppendChild(student); XmlElement name = doc.CreateElement("Name");
name.InnerXml = "张三三李思思";
student.AppendChild(name); XmlElement age = doc.CreateElement("Age");
age.InnerXml = "28";
student.AppendChild(age); XmlElement gender = doc.CreateElement("Gender");
gender.InnerXml = "男";
student.AppendChild(gender);
} doc.Save("Student.xml");
Console.WriteLine("保存成功");
#endregion #region 读取XML文档
XmlDocument doc = new XmlDocument(); doc.Load("OrDER.xml"); 还是 先获得根节点
XmlElement order = doc.DocumentElement;
获得根节点下面的所有子节点
XmlNodeList xnl = order.ChildNodes; foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
XmlElement items = order["Items"];
XmlNodeList xnl2 = items.ChildNodes;
foreach (XmlNode item in xnl2)
{
Console.WriteLine(item.Attributes["Name"].Value);
Console.WriteLine(item.Attributes["Count"].Value); if (item.Attributes["Name"].Value == "手套")
{
item.Attributes["Count"].Value = "新来哒";
}
} doc.Save("OrDER.xml");
#endregion #region 使用XPath的方式来读取XML文件 XmlDocument doc = new XmlDocument();
doc.Load("order.xml");
获得根节点
XmlElement order = doc.DocumentElement;
XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']"); Console.WriteLine(xn.Attributes["Name"].Value); xn.Attributes["Count"].Value = "woshi new"; doc.Save("order.xml");
Console.WriteLine("保存成功");
#endregion XmlDocument doc = new XmlDocument(); doc.Load("order.xml"); doc.RemoveAll();不行 根节点不允许删除 XmlElement order = doc.DocumentElement; order.RemoveAll();移除根节点下的所有子节点 XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']"); 让orderItem去删除属性
XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem"); 获得Items节点 XmlNode items = order["Items"];order.SelectSingleNode("/Order/Items"); items.RemoveChild(xn);移除当前节点 orderItem.RemoveAttributeNode(xn.Attributes["Count"]); xn.Attributes.RemoveNamedItem("Count"); doc.Save("order.xml");
Console.WriteLine("删除成功");
Console.ReadKey();

C# WinForm 界面控件的更多相关文章

  1. WinForm开发-界面控件到实体,实体到界面控件自动绑定

    在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动 ...

  2. WinForm 简易仿360界面控件

    因为经常要做一些1.2千行的小工具,WinForm自带的TabCtrl又不美观,所以想做成360的样子,在网上找来找去,都只有散乱的代码,没有可以通用的结构,于是自己写了一个简易的通用控件. 控件主要 ...

  3. WinForm 清空界面控件值的小技巧

    原文:WinForm 清空界面控件值的小技巧 在WinForm里面有时候需要清空自己输入内容或是选择的选项,以便重新操作流程,那么一般你是怎么清空界面各个控件值的呢?如果窗体里面控件,尤其是TextB ...

  4. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  5. C#多线程操作界面控件的解决方案(转)

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

  6. 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...

  7. winform基本控件----按钮

    这次来引用一个我们上课时候老师给的一个实验内容,来说一下winform程序设计中的按钮控件的使用.下面是我们老师给的实验内容. 实验目的: 掌握Winform的开发环境. 掌握窗体的创建和基本方法. ...

  8. 转--基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    原文  http://www.cnblogs.com/wuhuacong/p/3317223.html 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...

  9. C# WinForm实现控件拖动实例介绍

    主要是设计控件的MouseDown.MouseLeave.MouseMove事件.一步步来吧:1.定义一个枚举类型,描述光标状态 private enum EnumMousePointPosition ...

  10. Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目

    前言:因为这段时间要接触到DevExpress控件库,而我本身甚至对winform的控件都了解甚少,所以处在学习中,写下博客主要是为了方便后期的回顾,当然也可以给一些新人第一次接触时做为学习的参考,以 ...

随机推荐

  1. MVVM架构

    一.MVVM架构和Jetpack MVVM即Model-View-ViewModel的缩写,它的出现是为了将图形界面和业务逻辑,数据模型进行解耦.在前面章节所学习的Jetpack组件,大部分是为了能够 ...

  2. 【库函数】Qt中Json的操作

    参考博客: https://blog.csdn.net/hp_cpp/article/details/80338116 从文件中读取json https://www.cnblogs.com/ybqjy ...

  3. POJ: 2236 Wireless Network 题解

    POJ 2236 Wireless Network 加工并储存数据的数据结构 并查集 这是并查集的基本应用,两台修好的电脑若距离d内则加入合并.不过不小心的话会TLE,比如: #include < ...

  4. 智慧风电:数字孪生 3D 风机智能设备运维

    前言 6 月 1 日,福建省人民政府发布关于<福建省"十四五"能源发展专项规划>的通知.规划要求,加大风电建设规模.自 "30·60" 双碳目标颁布 ...

  5. 【收藏】制作艺术二维码,用 Stable Diffusion 就行!

    [收藏]Stable Diffusion 制作光影文字效果 https://www.cnblogs.com/Serverless/p/17620406.html 基于函数计算FC 快捷部署 Stabl ...

  6. 基于 Serverless+OSS 分分钟实现图片秒变素描

    简介: 在阿里云Serverless函数计算服务中部署普通图片转素描图函数服务,实现将批量上传到指定OSS桶内的图片自动转换为素描图并保存到另一个OSS桶内 场景介绍 小明接到学校老师安排的任务,需要 ...

  7. mybatis-plus-QueryWrapper 如何写or效果的语句 以及如何给or加括号

    先说想要的结果 希望mybatis-plus中QueryWrapper写法生成的sql语句中查询条件是 WHERE (( (LOGIN_ID = ? OR SHI_JI_LOGIN_ID = ?) ) ...

  8. 06-Shell内置命令

    1.内置命令介绍 Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件. 使用type 来确定一个命令是否是内置命令: type 命令 通常来说,内置命令会 ...

  9. OpenKruise :Kubernetes背后的托底

    本文分享自华为云社区<OpenKruise核心能力和工作原理>,作者:可以交个朋友. 一. 诞生背景 Kubernetes 自身提供的应用部署管理功能,无法满足大规模应用场景的需求,例如应 ...

  10. [转帖]容器化 TCP Socket 缓存、接收窗口参数

    https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/#rmem_default 最近需要支持一个单 POD 的 TCP 连接数上 1 ...