DataGrid,这个东西真麻烦????? 1.你可以在mouseup事件中编码2.没用过3.就是触发doubleclick事件呀。datagrid有这个事件呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、你需要通过设置DataGridTableStyle以及里面的DataGridColumnStyle,得到那个Column的TextBox,为他添加一个Click/MouseDown/MouseUp事件2、CurrentCellChanged事件3、同1 using System;using System.Data;using System.Drawing;using System.Windows.Forms;namespace TryScan{ /// <summary> /// Class1 的摘要说明。 /// </summary> internal class Styler {// private int iStart, iLast;// private bool bUnselecting; private Styler() { // // TODO: 在此处添加构造函数逻辑 // } static public void ChangeStyle(DataGrid dg) { ChangeStyle(dg, true, null, null, null); } static public void ChangeStyle(DataGrid dg, bool Selectable) { ChangeStyle(dg, Selectable, null, null, null); } static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly) { ChangeStyle(dg, Selectable, ReadOnly, null, null); } static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating) { ChangeStyle(dg, Selectable, ReadOnly, Validating, null); } static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating, int[] Width) { DataGridTableStyle ts; DataGridTextBoxColumn dgtbc; DataSet ds; DataColumn dc; int i, c, d, widthlen; bool b; bool[] brs; System.ComponentModel.CancelEventHandler[] cevhs; Graphics g; b = (dg.TableStyles.Count>0); if (b) return; b = dg.ReadOnly; if (ReadOnly == null) { ReadOnly = new bool[1]; ReadOnly[0] = b; } if (Validating == null) { Validating = new System.ComponentModel.CancelEventHandler[1]; Validating[0] = null; } if (dg.DataSource is DataSet) ds = (DataSet) dg.DataSource; else ds = ((DataTable) dg.DataSource).DataSet; ts = new DataGridTableStyle(); ts.MappingName = ds.Tables[0].TableName; ts.AlternatingBackColor = dg.AlternatingBackColor; ts.BackColor = dg.BackColor; ts.ForeColor = dg.ForeColor; ts.GridLineColor = dg.GridLineColor; ts.GridLineStyle = dg.GridLineStyle; ts.HeaderBackColor = dg.HeaderBackColor; ts.HeaderForeColor = dg.HeaderForeColor; ts.LinkColor = dg.LinkColor; ts.ReadOnly = dg.ReadOnly; ts.SelectionBackColor = dg.SelectionBackColor; ts.SelectionForeColor = dg.SelectionForeColor; c = ds.Tables[0].Columns.Count; d = (c < ReadOnly.Length? ReadOnly.Length: c); brs = new bool[d]; ReadOnly.CopyTo(brs, 0); for (i = ReadOnly.Length; i < d; i++) brs[i] = b; d = (c < Validating.Length? Validating.Length: c); cevhs = new System.ComponentModel.CancelEventHandler[d]; Validating.CopyTo(cevhs, 0); for (i = ReadOnly.Length; i < d; i++) cevhs[i] = null; g = dg.CreateGraphics(); b = (Width != null); if (b) widthlen = Width.Length; else widthlen = 0; for (i = 0; i < c; i++) { dgtbc = new DataGridTextBoxColumn(); dgtbc.TextBox.VisibleChanged += new EventHandler(dgcolumn_VisibleChanged); if (cevhs[i] != null) dgtbc.TextBox.Validating += cevhs[i]; dgtbc.TextBox.Tag = brs[i]; dc = ds.Tables[0].Columns[i]; if (dc.Caption != "") dgtbc.HeaderText= dc.Caption; else dgtbc.HeaderText= dc.ColumnName; dgtbc.MappingName = dc.ColumnName; if (b && (i < widthlen) && Width[i] > 0) dgtbc.Width = Width[i]; else dgtbc.Width = (int) g.MeasureString(dgtbc.HeaderText + "#V#", dg.CaptionFont).Width; ts.GridColumnStyles.Add(dgtbc); } dg.TableStyles.Clear(); dg.TableStyles.Add(ts); if (Selectable) dg.MouseMove += new MouseEventHandler(dg_Mouse); dg.Update(); } private static void dgcolumn_VisibleChanged(object sender, System.EventArgs e) { Point p; TextBox t; Control c; bool b; c = (Control) sender; if (c.Visible) { b = (bool) c.Tag; if (!b) { t = (TextBox) c; t.ReadOnly = false; t.CausesValidation = true; return; } p = c.Location; c.Visible = false; c = c.Parent; dgSelectCore(c, new MouseEventArgs(MouseButtons.Left, 1, p.X, p.Y, 0), true); } } private static void dgSelectCore(object sender, System.Windows.Forms.MouseEventArgs e, bool ForceSelect) { DataGrid dg = (DataGrid) sender; int rn, i, tmp; if (e.Button == MouseButtons.Left) { rn = dg.HitTest(e.X, e.Y).Row; if (rn<0) return; i = dg.CurrentCell.RowNumber; System.Diagnostics.Debug.WriteLine("rn = " + rn.ToString() + ", i = " + i.ToString() + ", ForceSelected = " + ForceSelect.ToString() + ", IsSelected = " + dg.IsSelected(i).ToString()); if ((rn == i) && !ForceSelect) { rn = 0; tmp = 0; try { for ( ; ; rn++) if (dg.IsSelected(rn) && (i != rn)) break; for ( ; ; rn++) if (i != rn) dg.UnSelect(rn); } catch{} } else if (dg.IsSelected(i) || ((i == rn) && ForceSelect)) { try { if (rn > i) tmp = i; else { tmp = rn; rn = i; } for (i = 0; i < tmp; i++) if (dg.IsSelected(i)) dg.UnSelect(i); for (; i <= rn; i++) if (!dg.IsSelected(i)) dg.Select(i); for (; ;i++) if (dg.IsSelected(i)) dg.UnSelect(i); } catch{} } } } private static void dg_Mouse(object sender, System.Windows.Forms.MouseEventArgs e) { dgSelectCore(sender, e, false); } }} 这些问题如果还没有得到求解参考http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q480q能否对你有帮助,上面都有述说以及代码 简单地说,你的消息被DataGrid控件里面的DataGridTextBoxColumn的一些内部控件吃掉了 关于《img>标签属性SRC Pinvoke如何传递类实例指针. 二进制数据读取问题 C#方法中值传递的问题? Form c# 程序,例如QQ发送消息,自己选择一个字体,发上的字体就是自己选择的字体样式,这个要怎么设置啊? ASP 控件 MouseOver C#如何实现在鼠标按下后(MouseDown事件)一直执行其内部的程序 VS2005的奇怪问题 请问一个异常处理的问题,catch中如果抛出异常的问题 高手能给我推荐本书吗 如何用tcpTrace或SoapToolkit带的MSSoapT调试VS.NET编制的WebService?急呀!! 有关网络流量
using System.Data;
using System.Drawing;
using System.Windows.Forms;namespace TryScan
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
internal class Styler
{
// private int iStart, iLast;
// private bool bUnselecting;
private Styler()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
static public void ChangeStyle(DataGrid dg)
{
ChangeStyle(dg, true, null, null, null);
} static public void ChangeStyle(DataGrid dg, bool Selectable)
{
ChangeStyle(dg, Selectable, null, null, null);
} static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly)
{
ChangeStyle(dg, Selectable, ReadOnly, null, null);
} static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating)
{
ChangeStyle(dg, Selectable, ReadOnly, Validating, null);
} static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating, int[] Width)
{
DataGridTableStyle ts;
DataGridTextBoxColumn dgtbc;
DataSet ds;
DataColumn dc;
int i, c, d, widthlen;
bool b;
bool[] brs;
System.ComponentModel.CancelEventHandler[] cevhs;
Graphics g; b = (dg.TableStyles.Count>0); if (b) return; b = dg.ReadOnly;
if (ReadOnly == null)
{
ReadOnly = new bool[1];
ReadOnly[0] = b;
} if (Validating == null)
{
Validating = new System.ComponentModel.CancelEventHandler[1];
Validating[0] = null;
} if (dg.DataSource is DataSet)
ds = (DataSet) dg.DataSource;
else
ds = ((DataTable) dg.DataSource).DataSet; ts = new DataGridTableStyle();
ts.MappingName = ds.Tables[0].TableName;
ts.AlternatingBackColor = dg.AlternatingBackColor;
ts.BackColor = dg.BackColor;
ts.ForeColor = dg.ForeColor;
ts.GridLineColor = dg.GridLineColor;
ts.GridLineStyle = dg.GridLineStyle;
ts.HeaderBackColor = dg.HeaderBackColor;
ts.HeaderForeColor = dg.HeaderForeColor;
ts.LinkColor = dg.LinkColor;
ts.ReadOnly = dg.ReadOnly;
ts.SelectionBackColor = dg.SelectionBackColor;
ts.SelectionForeColor = dg.SelectionForeColor; c = ds.Tables[0].Columns.Count; d = (c < ReadOnly.Length? ReadOnly.Length: c);
brs = new bool[d];
ReadOnly.CopyTo(brs, 0);
for (i = ReadOnly.Length; i < d; i++)
brs[i] = b; d = (c < Validating.Length? Validating.Length: c);
cevhs = new System.ComponentModel.CancelEventHandler[d];
Validating.CopyTo(cevhs, 0); for (i = ReadOnly.Length; i < d; i++)
cevhs[i] = null; g = dg.CreateGraphics(); b = (Width != null);
if (b)
widthlen = Width.Length;
else
widthlen = 0; for (i = 0; i < c; i++)
{
dgtbc = new DataGridTextBoxColumn();
dgtbc.TextBox.VisibleChanged += new EventHandler(dgcolumn_VisibleChanged);
if (cevhs[i] != null)
dgtbc.TextBox.Validating += cevhs[i];
dgtbc.TextBox.Tag = brs[i];
dc = ds.Tables[0].Columns[i];
if (dc.Caption != "")
dgtbc.HeaderText= dc.Caption;
else
dgtbc.HeaderText= dc.ColumnName;
dgtbc.MappingName = dc.ColumnName;
if (b && (i < widthlen) && Width[i] > 0)
dgtbc.Width = Width[i];
else
dgtbc.Width = (int) g.MeasureString(dgtbc.HeaderText + "#V#", dg.CaptionFont).Width;
ts.GridColumnStyles.Add(dgtbc);
}
dg.TableStyles.Clear();
dg.TableStyles.Add(ts);
if (Selectable) dg.MouseMove += new MouseEventHandler(dg_Mouse);
dg.Update();
} private static void dgcolumn_VisibleChanged(object sender, System.EventArgs e)
{
Point p;
TextBox t;
Control c;
bool b; c = (Control) sender;
if (c.Visible)
{
b = (bool) c.Tag;
if (!b)
{
t = (TextBox) c;
t.ReadOnly = false;
t.CausesValidation = true;
return;
}
p = c.Location;
c.Visible = false;
c = c.Parent;
dgSelectCore(c, new MouseEventArgs(MouseButtons.Left, 1, p.X, p.Y, 0), true);
}
} private static void dgSelectCore(object sender, System.Windows.Forms.MouseEventArgs e, bool ForceSelect)
{
DataGrid dg = (DataGrid) sender;
int rn, i, tmp;
if (e.Button == MouseButtons.Left)
{
rn = dg.HitTest(e.X, e.Y).Row;
if (rn<0) return;
i = dg.CurrentCell.RowNumber; System.Diagnostics.Debug.WriteLine("rn = " + rn.ToString() + ", i = " + i.ToString() + ", ForceSelected = " + ForceSelect.ToString() + ", IsSelected = " + dg.IsSelected(i).ToString()); if ((rn == i) && !ForceSelect)
{
rn = 0;
tmp = 0;
try
{
for ( ; ; rn++)
if (dg.IsSelected(rn) && (i != rn)) break;
for ( ; ; rn++)
if (i != rn)
dg.UnSelect(rn); }
catch{}
}
else if (dg.IsSelected(i) || ((i == rn) && ForceSelect))
{
try
{
if (rn > i)
tmp = i;
else
{
tmp = rn;
rn = i;
}
for (i = 0; i < tmp; i++)
if (dg.IsSelected(i)) dg.UnSelect(i);
for (; i <= rn; i++)
if (!dg.IsSelected(i)) dg.Select(i);
for (; ;i++)
if (dg.IsSelected(i)) dg.UnSelect(i);
}
catch{}
}
}
} private static void dg_Mouse(object sender, System.Windows.Forms.MouseEventArgs e)
{
dgSelectCore(sender, e, false);
}
}
}
参考
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q480q
能否对你有帮助,上面都有述说以及代码