博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮
阅读量:6881 次
发布时间:2019-06-27

本文共 7321 字,大约阅读时间需要 24 分钟。

转自:https://msdn.microsoft.com/zh-cn/library/ms171619(v=vs.110).aspx

 

 控件包括  类,其用于显示具有与按钮类似的用户界面 (UI) 的单元格。 但是, 不提供禁用单元格所显示按钮外观的方法。

以下代码示例演示如何自定义  类以显示可以显示为禁用的按钮。 此示例定义了一个新的单元格类型,即从  派生的 DataGridViewDisableButtonCell。 此单元格类型提供了一种新 Enabled 属性,可设置为 false 以拖动单元格中已禁用的按钮。 此示例还定义了一个新的列类型,即显示 DataGridViewDisableButtonCell 对象的DataGridViewDisableButtonColumn。 为了演示此新单元格和列类型,父级  中的每个 的当前值确定了相同行中 DataGridViewDisableButtonCell 的 Enabled 属性是否是 true 或false

System_CAPS_note注意

当从  或  进行派生并将新属性添加到派生的类时,请确保重写 Clone 方法以在克隆操作过程中复制新属性。 还应调用基类的 Clone 方法,以便将基类的属性复制到新的单元格或列。

示例

C#
 
using System;using System.Drawing;using System.Windows.Forms;using System.Windows.Forms.VisualStyles;class Form1 : Form{    private DataGridView dataGridView1 = new DataGridView();    [STAThread]    public static void Main()    {        Application.EnableVisualStyles();        Application.Run(new Form1());    }    public Form1()    {        this.AutoSize = true;        this.Load += new EventHandler(Form1_Load);    }    public void Form1_Load(object sender, EventArgs e)    {        DataGridViewCheckBoxColumn column0 =            new DataGridViewCheckBoxColumn();        DataGridViewDisableButtonColumn column1 =            new DataGridViewDisableButtonColumn();        column0.Name = "CheckBoxes";        column1.Name = "Buttons";        dataGridView1.Columns.Add(column0);        dataGridView1.Columns.Add(column1);        dataGridView1.RowCount = 8;        dataGridView1.AutoSize = true;        dataGridView1.AllowUserToAddRows = false;        dataGridView1.ColumnHeadersDefaultCellStyle.Alignment =            DataGridViewContentAlignment.MiddleCenter;        // Set the text for each button.        for (int i = 0; i < dataGridView1.RowCount; i++)        {            dataGridView1.Rows[i].Cells["Buttons"].Value =                "Button " + i.ToString();        }        dataGridView1.CellValueChanged +=            new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);        dataGridView1.CurrentCellDirtyStateChanged +=            new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);        dataGridView1.CellClick +=            new DataGridViewCellEventHandler(dataGridView1_CellClick);        this.Controls.Add(dataGridView1);    }    // This event handler manually raises the CellValueChanged event    // by calling the CommitEdit method.    void dataGridView1_CurrentCellDirtyStateChanged(object sender,        EventArgs e)    {        if (dataGridView1.IsCurrentCellDirty)        {            dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);        }    }    // If a check box cell is clicked, this event handler disables      // or enables the button in the same row as the clicked cell.    public void dataGridView1_CellValueChanged(object sender,        DataGridViewCellEventArgs e)    {        if (dataGridView1.Columns[e.ColumnIndex].Name == "CheckBoxes")        {            DataGridViewDisableButtonCell buttonCell =                (DataGridViewDisableButtonCell)dataGridView1.                Rows[e.RowIndex].Cells["Buttons"];            DataGridViewCheckBoxCell checkCell =                (DataGridViewCheckBoxCell)dataGridView1.                Rows[e.RowIndex].Cells["CheckBoxes"];            buttonCell.Enabled = !(Boolean)checkCell.Value;            dataGridView1.Invalidate();        }    }    // If the user clicks on an enabled button cell, this event handler      // reports that the button is enabled.    void dataGridView1_CellClick(object sender,        DataGridViewCellEventArgs e)    {        if (dataGridView1.Columns[e.ColumnIndex].Name == "Buttons")        {            DataGridViewDisableButtonCell buttonCell =                (DataGridViewDisableButtonCell)dataGridView1.                Rows[e.RowIndex].Cells["Buttons"];            if (buttonCell.Enabled)            {                MessageBox.Show(dataGridView1.Rows[e.RowIndex].                    Cells[e.ColumnIndex].Value.ToString() +                    " is enabled");            }        }    }}public class DataGridViewDisableButtonColumn : DataGridViewButtonColumn{    public DataGridViewDisableButtonColumn()    {        this.CellTemplate = new DataGridViewDisableButtonCell();    }}public class DataGridViewDisableButtonCell : DataGridViewButtonCell{    private bool enabledValue;    public bool Enabled    {        get        {            return enabledValue;        }        set        {            enabledValue = value;        }    }    // Override the Clone method so that the Enabled property is copied.    public override object Clone()    {        DataGridViewDisableButtonCell cell =            (DataGridViewDisableButtonCell)base.Clone();        cell.Enabled = this.Enabled;        return cell;    }    // By default, enable the button cell.    public DataGridViewDisableButtonCell()    {        this.enabledValue = true;    }    protected override void Paint(Graphics graphics,        Rectangle clipBounds, Rectangle cellBounds, int rowIndex,        DataGridViewElementStates elementState, object value,        object formattedValue, string errorText,        DataGridViewCellStyle cellStyle,        DataGridViewAdvancedBorderStyle advancedBorderStyle,        DataGridViewPaintParts paintParts)    {        // The button cell is disabled, so paint the border,          // background, and disabled button for the cell.        if (!this.enabledValue)        {            // Draw the cell background, if specified.            if ((paintParts & DataGridViewPaintParts.Background) ==                DataGridViewPaintParts.Background)            {                SolidBrush cellBackground =                    new SolidBrush(cellStyle.BackColor);                graphics.FillRectangle(cellBackground, cellBounds);                cellBackground.Dispose();            }            // Draw the cell borders, if specified.            if ((paintParts & DataGridViewPaintParts.Border) ==                DataGridViewPaintParts.Border)            {                PaintBorder(graphics, clipBounds, cellBounds, cellStyle,                    advancedBorderStyle);            }            // Calculate the area in which to draw the button.            Rectangle buttonArea = cellBounds;            Rectangle buttonAdjustment =                this.BorderWidths(advancedBorderStyle);            buttonArea.X += buttonAdjustment.X;            buttonArea.Y += buttonAdjustment.Y;            buttonArea.Height -= buttonAdjustment.Height;            buttonArea.Width -= buttonAdjustment.Width;            // Draw the disabled button.                            ButtonRenderer.DrawButton(graphics, buttonArea,                PushButtonState.Disabled);            // Draw the disabled button text.             if (this.FormattedValue is String)             {                TextRenderer.DrawText(graphics,                    (string)this.FormattedValue,                    this.DataGridView.Font,                    buttonArea, SystemColors.GrayText);            }        }        else        {            // The button cell is enabled, so let the base class             // handle the painting.            base.Paint(graphics, clipBounds, cellBounds, rowIndex,                elementState, value, formattedValue, errorText,                cellStyle, advancedBorderStyle, paintParts);        }    }}

转载于:https://www.cnblogs.com/leiliu-lucifer/p/5823188.html

你可能感兴趣的文章
python使用.proto文件生成service接口失败
查看>>
判断矩形是否在矩形中
查看>>
关于composer.json中require-dev和require-dev、autoload-dev和autoload的区别
查看>>
处理slave(低版本)复制master(高版本)产生的error 1236
查看>>
Vim(gvim)配色方案推荐
查看>>
变量的直接调整运用${variable # 或% }
查看>>
java利用dom4j递归输出所有节点
查看>>
[网络通信]WSAPoll使用
查看>>
Java虚拟机学习 - 垃圾收集器
查看>>
一个类可以实现多个有相同方法的接口
查看>>
Java使用jxl读取excel
查看>>
Grunt 插件开发与调式
查看>>
Python yield用法
查看>>
生成excel表报的控件FlexCel Studio for .NET
查看>>
使用SCVMM 2012 R2管理Hyper-v群集
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
php全文搜索引擎xunsearch的搭建
查看>>
HTTP 常见错误代码与含义
查看>>
我的友情链接
查看>>