zoukankan      html  css  js  c++  java
  • C#自定义控件的应用(数据绑定,属性等)

         刚刚开始程序设计的码农生涯,也许一些开发工具上的控件可以满足我们的需求,但是随之时间的迁移,我们对控件的呈现形式需求越来越多样化,这个时候就需要我们来自定义控件,我是一个刚刚入职没多久的菜鸟,接触软件开发也没有超过两年的时间,在以前的日子里,开发工具上的控件基本可以达到我学习的目的。但是现在工作了,用户的需求多样化,也造就了我们程序员的鬼斧神手。

        今天由于需求,我需要作出如下图这样的界面并绑定数据库数据,开始我有几个思路,并且一个一个去尝试,对于winform的这种格式,之前从来也没有做过,如果是asp.net这种格式的话就非常的简单了。

        思路一:listview控件,看上去listview控件可以实现这种界面,但是由于界面的局限性,做出这种效果似乎不大可能,在尝试过一两天的时间后,我觉得绑定数据是没有任何问题的,但是,问题就是在listview控件中实现如下图这种格式的布局。所以我选择了放弃,不知道各位用listview控件实现过这种效果没有。后来听说重写listview的方法可行,但是我没有去试过。

        思路二:datagridview控件,开始没有往这个方面去考虑,部门里大牛们说可以,我仔细的看了一下datagridview控件的一下属性,其中列的类型里面控件格式没有我需要的控件,可得的话,又要方法重写了。这个工作量估计很大,而且布局能不能布局成这样的效果我也不知道。这个我想了一下也没有去尝试。

        思路三:自定义控件,以前在学校里面接触过自定义控件,但都是简单的拼接一下各个不同的控件,没有什么特别的功能,今天特意的学习了一下字典控件,最终做好了一个类似于IDE里面的控件一样可以轻松使用。

        实现效果不再熬数,这里我记下我写过的代码:

    using System.Data;
    using System.Data.SqlClient;
    namespace menu
    {
    partial class MyControl
    {

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
    protected override void Dispose(bool disposing)
    {
    if (disposing && (components != null))
    {
    components.Dispose();
    }
    base.Dispose(disposing);
    }

    #region 组件设计器生成的代码

    /// <summary>
    /// 设计器支持所需的方法 - 不要
    /// 使用代码编辑器修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MyControl));
    this.groupBox1 = new System.Windows.Forms.GroupBox();
    this.label1 = new System.Windows.Forms.Label();
    this.pictureBox1 = new System.Windows.Forms.PictureBox();
    this.label2 = new System.Windows.Forms.Label();
    this.label3 = new System.Windows.Forms.Label();
    this.label4 = new System.Windows.Forms.Label();
    this.label5 = new System.Windows.Forms.Label();
    this.imageList1 = new System.Windows.Forms.ImageList(this.components);
    this.groupBox1.SuspendLayout();
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
    this.SuspendLayout();
    //
    // groupBox1
    //
    this.groupBox1.Controls.Add(this.label1);
    this.groupBox1.Controls.Add(this.pictureBox1);
    this.groupBox1.Location = new System.Drawing.Point(0, 14);
    this.groupBox1.Name = "groupBox1";
    this.groupBox1.Size = new System.Drawing.Size(99, 163);
    this.groupBox1.TabIndex = 0;
    this.groupBox1.TabStop = false;
    this.groupBox1.Text = "groupBox1";
    //
    // label1
    //
    this.label1.AutoSize = true;
    this.label1.Location = new System.Drawing.Point(6, 116);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(41, 12);
    this.label1.TabIndex = 1;
    this.label1.Text = "label1";
    //
    // pictureBox1
    //
    this.pictureBox1.Location = new System.Drawing.Point(3, 17);
    this.pictureBox1.Name = "pictureBox1";
    this.pictureBox1.Size = new System.Drawing.Size(90, 90);
    this.pictureBox1.TabIndex = 0;
    this.pictureBox1.TabStop = false;
    //
    // label2
    //
    this.label2.AutoSize = true;
    this.label2.Location = new System.Drawing.Point(114, 31);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(41, 12);
    this.label2.TabIndex = 2;
    this.label2.Text = "label2";
    //
    // label3
    //
    this.label3.AutoSize = true;
    this.label3.Location = new System.Drawing.Point(114, 70);
    this.label3.Name = "label3";
    this.label3.Size = new System.Drawing.Size(41, 12);
    this.label3.TabIndex = 3;
    this.label3.Text = "label3";
    //
    // label4
    //
    this.label4.AutoSize = true;
    this.label4.Location = new System.Drawing.Point(116, 109);
    this.label4.Name = "label4";
    this.label4.Size = new System.Drawing.Size(41, 12);
    this.label4.TabIndex = 4;
    this.label4.Text = "label4";
    //
    // label5
    //
    this.label5.AutoSize = true;
    this.label5.Location = new System.Drawing.Point(114, 148);
    this.label5.Name = "label5";
    this.label5.Size = new System.Drawing.Size(41, 12);
    this.label5.TabIndex = 5;
    this.label5.Text = "label5";
    //
    // imageList1
    //
    this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
    this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
    this.imageList1.Images.SetKeyName(0, "001.jpg");
    this.imageList1.Images.SetKeyName(1, "002.jpg");
    //
    // MyControl
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.Controls.Add(this.label5);
    this.Controls.Add(this.label4);
    this.Controls.Add(this.label2);
    this.Controls.Add(this.label3);
    this.Controls.Add(this.groupBox1);
    this.Name = "MyControl";
    this.Size = new System.Drawing.Size(235, 207);
    this.groupBox1.ResumeLayout(false);
    this.groupBox1.PerformLayout();
    ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
    this.ResumeLayout(false);
    this.PerformLayout();

    }

    #endregion

    public System.Windows.Forms.GroupBox groupBox1;
    public System.Windows.Forms.Label label1;
    public System.Windows.Forms.PictureBox pictureBox1;
    public System.Windows.Forms.Label label2;
    public System.Windows.Forms.Label label3;
    public System.Windows.Forms.Label label4;
    public System.Windows.Forms.Label label5;
    public void DataLoad(int m) //自定义数据绑定方法
    {
    SqlConnection con = Class1.CyCon();
    con.Open();
    string str="select * from tb_test where id='"+m+"'";
    SqlCommand cmd = new SqlCommand(str, con);
    //DataSet ds = new DataSet();
    //sda.Fill(ds);
    SqlDataReader sdr = cmd.ExecuteReader();
    while (sdr.Read())
    {
    groupBox1.Text = sdr["id"].ToString();
    label1.Text = sdr["position"].ToString();
    label2.Text = "工号:"+sdr["workno"].ToString();
    label3.Text = "姓名:"+sdr["name"].ToString();
    label4.Text = "类型:" + sdr["leixing"].ToString();
    label5.Text = sdr["time"].ToString();
    if (sdr["leixing"].ToString()=="进")
    {
    pictureBox1.Image = imageList1.Images[1];
    }
    else
    {
    pictureBox1.Image = imageList1.Images[0];
    }
    /*if(label4.Text=="出")
    {
    pictureBox1.Image = imageList1.Images[1];
    }*/
    }

    }

    public System.Windows.Forms.ImageList imageList1;
    private System.ComponentModel.IContainer components;
    }
    }

      

  • 相关阅读:
    类似详情表里面查询最后一次下的订单(以下示例是查找最近一次登陆的记录)
    你真的理解了继承和多态吗?
    尝试了N个版本的Visual C++ 2005后,终于这个Visual C++ 2005 Express Beta 2可以用了。
    [Eclipse笔记]请对Java、Sun、NetBeans、Eclipse感兴趣朋友的看看Eclipse对Sun的心态吧
    [Eclipse笔记]无意中发现Eclipse3.1M7中增加的一项虽然小却很方便的功能
    [Eclipse笔记]Back to the old days Eclipse下的二进制文件编辑器插件EHEP
    [Eclipse笔记]Eclipse3.1M7在Windows下新的内存管理方式
    Is JBuilder dead?
    [Eclipse笔记]SQLExplorer插件试用手记
    [Eclipse笔记]Bug 21493 fixed
  • 原文地址:https://www.cnblogs.com/deng-c-q/p/4724621.html
Copyright © 2011-2022 走看看