zoukankan      html  css  js  c++  java
  • 如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮(摘录)

    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);
            }
        }
    }
  • 相关阅读:
    CSS——实现图像远距离翻转效果
    《精通CSS》一个下拉菜单的例子
    将博客搬至CSDN
    44个Java代码性能优化总结
    QRCode 二维码生成
    Linux命令
    spring
    ajax 学习总结
    Servlet+Ajax实现搜索框智能提示代码
    搜索框智能提示
  • 原文地址:https://www.cnblogs.com/wucg/p/1769969.html
Copyright © 2011-2022 走看看