.NET-6.WinForm1.学习经验总结


一、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);

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;

}

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);
}

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;

}

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);
}

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);
                    }
                }
            }

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

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

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

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
guna ui是一个开源的用户界面(UI)工具包,它允许开发者使用它的组件和样式来构建跨平台的用户界面。以下是guna ui的使用教程。 第一步,安装guna ui。你可以在guna ui的官方网站或者GitHub页面找到安装指南。根据你的开发环境和项目需求,你可以选择使用npm、yarn或者直接下载源代码。 第二步,导入guna ui。一旦安装完成,你需要在你的项目中导入guna ui的模块或者样式表。具体的导入方法取决于你的项目的需求,你可以参考guna ui的文档或者示例来进行导入。 第三步,使用guna ui的组件。guna ui提供了丰富的组件库,包括按钮、输入框、下拉菜单、表格等等。你可以在你的代码中使用这些组件来构建你的用户界面。例如,你可以使用<Button>组件创建一个按钮,并给它添加事件处理逻辑。 第四步,设置样式。guna ui的样式是基于CSS的,并且可以通过类名或者直接内联进行设置。你可以通过类名来设置组件的样式,也可以使用CSS样式对象来直接设置组件的样式。 第五步,运行和测试。一旦你完成了guna ui的使用和设置,你可以运行你的项目并进行测试。根据需要,你可以在测试过程中对guna ui的组件、样式和功能进行调整和优化。 总结来说,guna ui使用教程包括安装guna ui、导入模块和样式、使用组件、设置样式以及运行和测试项目。通过按照这些步骤,你可以快速上手guna ui,构建出美观且功能强大的跨平台用户界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joyyi9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值