c# - 在按键上更改 WinForm DataGridView 中的颜色
问题描述
我在 aDataGridView
中有三列相互依赖。让我们分别将它们标记为第 1、2 和 3 列。在这种情况下,第 1 列必须小于第 2 列,第 2 列必须小于第 3 列。
如果我在单元格颜色中调用SetValidBandByRow()
下面的函数,sysIdentGV_CellValueChanged
则预期的浅粉色表示三个单元格之一存在错误,需要解决。但是,当SetValidBandByRow(...)
从KeyPress
事件中调用它时,它会记录一个新值违反条件,但正在编辑的单元格不保留在 中设置的单元格颜色SetValidBandByRow(...)
。为了解决这个问题,我KeyPress
通过将文本框背景色设置为浅粉色来发现这一点,但是我得到了一个白色边框,请参阅下面的“编辑时”图像。
private void sysIdentGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
/*some other validation and building of the rltu object here */
if(!SetValidBandByRow(rltu))
{
/*building error msg and displaying error*/
}
return;
}
private bool SetValidBandByRow(Tuple<int,double,double,double> rowLowerTransUpper)
{
bool wasValid = true;
if (rowLowerTransUpper.Item1 < 0 || rowLowerTransUpper.Item1 >= GV.RowCount)
return wasValid;
Color color = Color.White;
if (!(rowLowerTransUpper.Item2 <= rowLowerTransUpper.Item3 && rowLowerTransUpper.Item3 <= rowLowerTransUpper.Item4))
{
color = Color.LightPink;
wasValid = false;
}
GV.Rows[row].Cells[(int)GVEnum.lowerCutoff].Style.BackColor = color;
GV.Rows[row].Cells[(int)GVEnum.TransFreq].Style.BackColor = color;
GV.Rows[row].Cells[(int)GVEnum.upperCutoff].Style.BackColor = color;
return wasValid;
}
设置tb.backcolor
为GV_Keypress
(单元格仍处于焦点):
未设置(单元格仍tb.backcolor
处于GV_Keypress
焦点状态):
在设置 GV.Rows[row] 之后。Cells
[(int)GVEnum.lowerCutoff].Style.BackColor 和 SelectionBackColor on GV_CellValueChanged
:
我希望要么删除“编辑时”图像周围的空白,要么找到另一种似乎不太可行的方法。
这是我尝试将文本框设置为背景颜色的一些东西,但似乎没有像我预期的那样工作:
private void GV_KeyPress(object sender, KeyPressEventArgs e)
{
/*some other validation and building of the rltu object here */
//the result of the section below can be seen in image 1 "Setting
//active textbox back color" with out this section I get image two.
TextBox tb = (TextBox)GV.EditingControl;
if (!SetValidBandByRow(rltu))
{
tb.Margin = new Padding(0);
GV.CurrentCell.Style.BackColor = Color.LightPink;
GV.CurrentCell.Style.SelectionBackColor = Color.LightPink;
tb.BackColor = Color.LightPink;
}
else
tb.BackColor = Color.White;
}
谢谢
解决方案
如果其他人想做类似的事情。这个问题在另一个堆栈溢出问题中得到了回答,可以在这里找到
推荐阅读
- typescript - 强制接口字段的名称必须等于另一个字段的值
- git - 无分支推送 git commit
- node.js - docker container install -g 复制到其他容器
- xcode - Xcode10 错误:“iPhone 已拒绝启动请求”
- kernel - ESXi 中的审核服务?
- mysql - 无法根据销售额对商品进行排名,
- java - 如何在 IntelliJ IDEA 中列出所有未经测试的类?
- azure-devops - 如果我们只有一个团队,我们如何同时进行多个冲刺?
- sql-server - 使用 sql server 时,一些 using 指令显示为灰色
- sql - 在另一列最大的列上连接表