Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在较大的文本框中编辑DataGridView文本单元格_C#_Winforms_Datagridview_Textbox_Edit - Fatal编程技术网

C# 如何在较大的文本框中编辑DataGridView文本单元格

C# 如何在较大的文本框中编辑DataGridView文本单元格,c#,winforms,datagridview,textbox,edit,C#,Winforms,Datagridview,Textbox,Edit,我有一个带有文本列的DataGridView。在DataGridView中显示的某些单元格可能有点长,因此我截断了文本并在文本中添加“…”。我不想将文本换行成多行 我想让用户编辑列中的文本。在EditingControlShowing中,我当前将编辑文本框的文本设置为文本的完整值(否则只显示截断值)。到目前为止一切都很好 如何使编辑文本框垂直扩展到单元格之外(单元格只有一行高),以便于用户编辑多行条目?您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的PositionEditingCont

我有一个带有文本列的DataGridView。在DataGridView中显示的某些单元格可能有点长,因此我截断了文本并在文本中添加“…”。我不想将文本换行成多行

我想让用户编辑列中的文本。在EditingControlShowing中,我当前将编辑文本框的文本设置为文本的完整值(否则只显示截断值)。到目前为止一切都很好


如何使编辑文本框垂直扩展到单元格之外(单元格只有一行高),以便于用户编辑多行条目?

您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的
PositionEditingControl
,并设置编辑面板和编辑控件的位置和大小:

public class MyTextBoxCell : DataGridViewTextBoxCell
{
    public override void PositionEditingControl(bool setLocation, bool setSize,
        Rectangle cellBounds, Rectangle cellClip, DataGridViewCellStyle cellStyle, 
        bool singleVerticalBorderAdded, bool singleHorizontalBorderAdded, 
        bool isFirstDisplayedColumn, bool isFirstDisplayedRow)
    {
        cellClip.Height = cellClip.Height *4; // ← Or any other suitable height
        cellBounds.Height = cellBounds.Height * 4;
        var r = base.PositionEditingPanel( cellBounds, cellClip, cellStyle, 
            singleVerticalBorderAdded, singleHorizontalBorderAdded, 
            isFirstDisplayedColumn, isFirstDisplayedRow);
        this.DataGridView.EditingControl.Location = r.Location;
        this.DataGridView.EditingControl.Size = r.Size;
    }
    public override void InitializeEditingControl(int rowIndex,
        object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
        base.InitializeEditingControl(rowIndex, initialFormattedValue, 
            dataGridViewCellStyle);
        ((TextBox)this.DataGridView.EditingControl).Multiline = true;
        ((TextBox)this.DataGridView.EditingControl).BorderStyle = BorderStyle.Fixed3D;
    }
}
然后,要使用它,请将此单元格的一个实例分配给要更改其编辑器大小的
列的
CellTemplate
属性:

this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();
或者,您可以创建新列并使用自定义列:

public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
    public MyTextBoxColumn()
    {
        CellTemplate = new MyTextBoxCell();
    }
}