当前位置:   article > 正文

.NET-6.WinForm1.学习经验总结_guna.u12 winform

guna.u12 winform


一、WinForm

学就完事!!!

第三方nuget包控件:
guna.UI
devexpress
CxFlatUI
Guna.UI2
MaterialWinforms

推荐项目:
https://github.com/HuJinguang/CxFlatUI
https://github.com/yuzhengyang/Fork
https://github.com/lstratman/EasyTabs
https://github.com/YuanJianTing/WinForm.UI
https://github.com/Callumgm/Clean-GUI-Template
SunnyUI 框架
https://github.com/IgnaceMaes/MaterialSkin
https://github.com/Live-Charts/Live-Charts
https://github.com/kwwwvagaa/NetWinformControl

自定义控件
https://blog.csdn.net/weixin_44634727/article/details/109139634
https://blog.csdn.net/kwwwvagaa/article/details/100586547

C#:WinForm中使用IrisSkin4美化窗口界面(必须是.netframework)
https://blog.csdn.net/qq_43884946/article/details/125311115?

二、经验

1.输入文本框的验证

1.实现中文符号不能输入

/// <summary>
/// 输入验证
/// </summary>
/// <param name="e"></param>
public void check(KeyPressEventArgs e)
{
	//实现中文符号不能输入
	char[] charstr = { '!', '@', '#', '¥', '%', '&', '*', '(', ')', '《', '<', '>', '?', ':', '"', '{', '}', '~', '-', '[', ']', '|' };// 非法字符数组(有几个就写几个用单引号引上‘’用,点隔开)
	for (int i = 0; i < charstr.Length; i++)
	{
	   if (e.KeyChar == charstr[i])
	       //使用e.handled = true 禁止输入
	       e.Handled = true;
	}
}
//调用
check(e);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.实现不重复数字输入

//只能输入数字和回车键,对于不符合条件的输入 使用e.handled = true 禁止输入
if (!Char.IsNumber(e.KeyChar) && e.KeyChar != (char)Keys.Back) e.Handled = true;

//判断是否为数字,为数字的话检查是否有重复数字,禁止重复输入
if (Char.IsNumber(e.KeyChar))
{
    var no = this.txtAjdjhGH.Text;
    if (no.Contains(e.KeyChar))
        e.Handled = true;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.全选

private void btnGtAll_Click(object sender, EventArgs e)
{
    if (this.checkSelectAll.Checked == true)
    {
        string value = "true";
        foreach (DataGridViewRow row in dgvList.Rows)
        {
            row.Cells[0].Value = value;
        }
    }
    else
    {
        string value = "false";
        foreach (DataGridViewRow row in dgvList.Rows)
        {
            row.Cells[0].Value = value;
        }
    }

    //SetAllRowCheck(dgvList, ok);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3.按钮是否可操作

private void MakeButtonEnabledOrNot()
{
    bool flag = (this.dgvList.Rows.Count == 0 ? false : true);
    //this.btnBatchGrounding.Enabled = flag;
    this.btnExport.Enabled = flag;
    this.btnReset.Enabled = flag;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.自动序号列

private void dgvList_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
   //自动序号列 与数据无关
	Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, this.dgvList.RowHeadersWidth - 4, e.RowBounds.Height);
	TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), this.dgvList.RowHeadersDefaultCellStyle.Font, rectangle,
	                                                  this.dgvList.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5.获取控件

用this.dataGridView1.CurrentRow.Cells[0].Value获得id
listBox1.DisplayMember = ds.Tables[0].Columns[0].ToString();
listBox1.DisplayMember = dt.Columns[0].ToStiring();

foreach (Control ctr in panel2.Controls)
            {
                if (ctr is CheckBox)
                {
                    CheckBox ck = ctr as CheckBox;
                    if (ck.Checked)
                    {
                        MessageBox.Show(ck.Text);
                    }
                }
            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6.学习加载时

#region 窗体加载后的初始化
private void GHGroundingForm_Load(object sender, EventArgs e)
{
    dtstartZD.Value = DateTime.Today.Date;
    dtendZD.Value = DateTime.Today.Date;
    dtstartPZ.Value = DateTime.Today.Date;
    dtendPZ.Value = DateTime.Today.Date;

    dgvList.AutoGenerateColumns = false; // 不允许 datagridview 自动产生列
    dgvList.ReadOnly = true;
    //记录DataGridView设置文本居中显示
    dgvList.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
    this.btnBatchGrounding.Enabled = false;
    dgvList.Columns[19].Visible = false;
    MakeButtonEnabledOrNot();
    
    Query();
}
//创建窗口句柄时出错

while (tabPage.Controls.Count > 0)
{
    Control ct = tabPage.Controls[0];
    tabPage.Controls.Remove(ct);
    ct.Dispose();
    ct = null;
}

#endregion
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

7.实现拖拽

private int tmpx=0, tmpy=0;
private bool MoveFlag;

private void button1_MouseUp(object sender, MouseEventArgs e)
{
    MoveFlag = false;
}

private void button1_MouseMove(object sender, MouseEventArgs e)
{
    if (MoveFlag)
    {
    button1.Left += Convert.ToInt16(e.X -this.tmpx );//设置x坐标.
    button1.Top += Convert.ToInt16(e.Y - this.tmpy);//设置y坐标.
}
}

private void button1_MouseDown(object sender, MouseEventArgs e)
{
    MoveFlag = true;
    this.tmpx = e.X;
    this.tmpy = e.Y;
    
}

>第二种方法,使用自定义控件
private int ox, oy;
public UserControlLine()
{
    InitializeComponent();
    MouseDown += new MouseEventHandler(UserControlLine_MouseDown);
    MouseMove += new MouseEventHandler(UserControlLine_MouseMove);
}

private void UserControlLine_MouseDown(object? sender, MouseEventArgs e)
{
    ox=e.X;
    oy = e.Y;
    BringToFront();
}
private void UserControlLine_MouseMove(object? sender, MouseEventArgs e)
{
    var el = (Control)sender;
    if (e.Button == MouseButtons.Left)
    {
        el.Top += e.Y - oy;
        el.Left += e.X - ox;
        Parent.Invalidate();
    }
}

#endregion
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

8.自定义控件

// </summary>
private string[] btns;
/// <summary>
/// 需要显示的按钮文字
/// </summary>
/// <value>The BTNS.</value>
[Description("需要显示的按钮文字"), Category("自定义")]
public string[] Btns
{
    get { return btns; }
    set { btns = value; }
}
>
/// <summary>
/// 控件的背景色
/// </summary>
private Color _backColorUC = Color.Transparent; //声明一个颜色变量 透明色 用于初始化 控件背景色
 private Color m_tipsColor = Color.FromArgb(232, 30, 99);
[Description("控件的背景色"), Category("自定义")]  //新建控件说明 用来描述控件的作用;一个类别.
public Color BackColorUC  //创建一个属性名 用于在属性窗口中显示出来
{
    get { return _backColorUC; }  //返回 颜色变量 初始化背景色 为透明
    set                                      //set 是当用户在属性窗口设置颜色的时候执行
    {
        _backColorUC = value;  //获取用户在属性窗口中 选择的颜色 赋值给这个颜色变量 
        this.BackColor = _backColorUC;  //将颜色赋值给 控件的背景颜色
        Refresh();//强制控件使其工作区无效,并立即重绘自己和任何子控件。
    }
}
private Color _backcolorMove = Color.Transparent;
[Description("光标移动到控件上方显示的颜色")]
public Color backcolorMove						//再创建一个属性 用于接受 用户希望鼠标移动到 控件上时显示的颜色
{
    get { return _backcolorMove; }
    set { _backcolorMove = value; }				//获取颜色 先不赋值
}

private void button1_MouseMove(object sender, MouseEventArgs e)
{
    if (_backcolorMove != Color.Transparent)      // 如果 用户在属性窗口为backcolorMove设置了颜色 _backColorUC 就不是原始的 透明色了 此时
    {
        BackColorUC = _backcolorMove;      //将用户设置的值赋值给BackColorUC 让它先赋值给_backColorUC再赋值给this.BackColor设置颜色
    }

}
public  event EventHandler? ButtontestClick;

private void button1_Click(object sender, EventArgs e)
{
    ButtontestClick?.Invoke(sender, e);
}

#endregion
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

winform 连接mysql

  1. 下载nuget包 MySql.Data
  2. 建立一个公共类 mysqlConnection.cs
  3. 建立一个窗体Main.Form.cs
  • 这个其实也是ado.net 数据访问技术,值得参考
    在这里插入图片描述
//mysqlConnection.cs
public class mysqlConnection
{

    public MySqlConnection mySqlCont { get; set; }

    //hostaddress= "192.168.2.8"
    //hostaddress= "192.168.43.85"
    public mysqlConnection(string hostaddress= "localhost", string databaseName="traytest",string name="root",string password="123456")
    {
        string connetStr = "server=" + hostaddress + ";User Id=" + name + ";password=" + password + ";database=" + databaseName; //localhost不支持ssl连接时,最后一句一定要加!!!
        mySqlCont = new MySqlConnection(connetStr);
        try
        {
            mySqlCont.Open(); //连接数据库
            MessageBox.Show("数据库连接成功", "提示", MessageBoxButtons.OK);
            Console.WriteLine("成功");
            //mysqlConnection.mySqlCont.Close();       //断开连接
            //MessageBox.Show("数据库关闭成功", "提示", MessageBoxButtons.OK);
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);     //显示错误信息
            Console.WriteLine("失败。");
        }
    }
}

//MainForm.cs
public partial class MainForm : Form
{
    public mysqlConnection mysqlConnection;

    MySqlCommand SQLCmd;
    public int s1;
    public string s2, s3;
    public MainForm()
    {
        InitializeComponent();
        mysqlConnection = new mysqlConnection();
        query_Click();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        dataGridView1.Rows[0].Selected = true;
    }

    private void query_Click()
    {
        string searchStr = "select * from user";
        MySqlDataAdapter adapter = new MySqlDataAdapter(searchStr, mysqlConnection.mySqlCont);
        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet, "table1");
        this.dataGridView1.DataSource = dataSet.Tables["table1"];
        dataGridView1.Rows[0].Selected = true;


    }

    private void bt_ADD_Click(object sender, EventArgs e)
    {
        s1 = Convert.ToInt16(textBox1.Text);
        s2 = textBox2.Text;
        s3 = textBox3.Text;

        try
        {
            string searchStr = "insert into user values(" + s1 + ",'" + s2 + "','" + s3 + "')";
            SQLCmd = new MySqlCommand(searchStr, mysqlConnection.mySqlCont);
            SQLCmd.ExecuteNonQuery();
            MessageBox.Show("插入成功", "提示", MessageBoxButtons.OK);
            //bt_CONNECT_Click(sender, e);
            query_Click();
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);
        }
    }

    //删除
    private void bt_DELETE_Click(object sender, EventArgs e)
    {
        if (textBox1.Text.Trim() != "")
        {
            try
            {
                s1 = Convert.ToInt16(textBox1.Text);
                string searchStr = ("delete from user where id=" + s1);
                SQLCmd = new MySqlCommand(searchStr, mysqlConnection.mySqlCont);
                SQLCmd.ExecuteNonQuery();
                MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK);
                //bt_CONNECT_Click(sender, e);
                query_Click();
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);
            }
        }
        else
        {
            try
            {
                for (int i = 0; i < 100; i++)//遍历所有选中的行
                {
                    if (dataGridView1.Rows[i].Selected == true)
                    {
                        string value = dataGridView1.Rows[i].Cells[0].Value.ToString();
                        int tmp = Convert.ToInt32(value);
                        string sql = ("delete from user where id=" + tmp);
                        SQLCmd = new MySqlCommand(sql, mysqlConnection.mySqlCont);
                        SQLCmd.ExecuteNonQuery();
                        MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK);
                        //bt_CONNECT_Click(sender, e);
                        query_Click();
                        break;
                    }
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);
            }
        }
    }



    //修改
    private void bt_MODIFY_Click(object sender, EventArgs e)
    {


        if (textBox1.Text.Trim() != "")
        {
            s1 = Convert.ToInt16(textBox1.Text);
            try
            {
                string searchStr = ($"update user set name='{textBox2.Text.Trim()}',age='{textBox3.Text.Trim()}'  where id=" + s1);
                SQLCmd = new MySqlCommand(searchStr, mysqlConnection.mySqlCont);
                SQLCmd.ExecuteNonQuery();
                // bt_CONNECT_Click(sender, e);
                query_Click();
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);
            }
        }
        else
        {
            try
            {
                for (int i = 0; i < 100; i++)//遍历所有选中的行
                {
                    if (dataGridView1.Rows[i].Selected == true)
                    {
                        string value = dataGridView1.Rows[i].Cells[0].Value.ToString();
                        string name = dataGridView1.Rows[i].Cells[1].Value.ToString();
                        string age = dataGridView1.Rows[i].Cells[2].Value.ToString();
                        int tmp = Convert.ToInt32(value);
                        string searchStr = ($"update user set name='{name}' ,age='{age}' where id=" + tmp);
                        SQLCmd = new MySqlCommand(searchStr, mysqlConnection.mySqlCont);
                        SQLCmd.ExecuteNonQuery();
                        MessageBox.Show("修改成功!", "提示", MessageBoxButtons.OK);
                        //bt_CONNECT_Click(sender, e);
                        query_Click();
                        break;
                    }
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180

总结

这个不完善,得补充

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/290019
推荐阅读
相关标签
  

闽ICP备14008679号