gpt4 book ai didi

c# - DataGridView 自定义 DataGridViewColumn 单元格的奇怪字符 'q' 问题

转载 作者:行者123 更新时间:2023-11-30 21:17:27 24 4
gpt4 key购买 nike

我为从 DataGridViewColumn、DataGridViewTextBoxCell 派生的 datagridview 创建了一个自定义列,并实现了 IDataGridViewEditingControl。

我创建了一个包含简单文本框的用户控件,我将此控件用作该列的编辑控件。

现在我在这种情况下遇到了一个奇怪的问题。当我按下字符“q”时,DataGridView 自定义列中的单元格不显示它并且什么也没有发生,但是当我按下任何其他键时它会正确显示在单元格中。

这可能是什么问题?我通过为每个事件调试它来尝试各种方法,但徒劳无功,我还找不到任何东西。

我在下面给出了我创建的自定义列的代码。

  public class CustomControlColumn : DataGridViewColumn
{
public CustomControlColumn() : base(new CustomTextCell()) { }

public override DataGridViewCell CellTemplate
{
get
{
return base.CellTemplate;
}
set
{
// Ensure that the cell used for the template is a CustomComboCell.
if (value != null && !value.GetType().IsAssignableFrom(typeof(CustomTextCell)))
{
throw new InvalidCastException("Must be a CustomTextCell");
}

base.CellTemplate = value;
}
}
}

public class CustomTextCell : DataGridViewTextBoxCell
{
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
// Set the value of the editing control to the current cell value.
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
var control = DataGridView.EditingControl as CustomTextBoxControl;

if (OwningColumn == null)
return;

// Use the default row value when Value property is null.
if (Value == null)
{
control.Text = string.Empty;
}
else
{
control.Text = Value.ToString();
}
}

public override Type EditType
{
get
{
// Return the type of the editing contol that CustomComboCell uses.
return typeof(CustomControlEditingControl);
}
}

public override Type ValueType
{
get
{
// Return the type of the value that CustomTextCell contains.
return typeof(String);
}
}

public override object DefaultNewRowValue
{
get
{
// Use the empty string as the default value.
return string.Empty;
}
}
}

class CustomControlEditingControl : CustomTextBoxControl, IDataGridViewEditingControl
{
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
// Nothing to do
}

public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
// Let the control handle the keys listed.
switch (keyData & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
return false;
}
}

public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
}

public DataGridView EditingControlDataGridView { get; set; }

public object EditingControlFormattedValue
{
get { return Text; }
set { Text = value.ToString(); }
}

public int EditingControlRowIndex { get; set;}

public bool EditingControlValueChanged { get; set; }

public Cursor EditingPanelCursor
{
get { return base.Cursor; }
}

public bool RepositionEditingControlOnValueChange
{
get { return false; }
}
}

我已通过设计器将其添加为我的 DataGridView 中的列之一,并且 DataGridView 未与任何数据源相关联。

谁能指出我这段代码中的问题?

最佳答案

进行以下更改,看看是否有帮助:

public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
// Let the control handle the keys listed.
switch (keyData & Keys.KeyCode)
{
case Keys.Left:
case Keys.Up:
case Keys.Down:
case Keys.Right:
case Keys.Home:
case Keys.End:
case Keys.PageDown:
case Keys.PageUp:
return true;
default:
// return false; <--not this
return !dataGridViewWantsInputKey; //try this!
}
}

关于c# - DataGridView 自定义 DataGridViewColumn 单元格的奇怪字符 'q' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com