Ik heb aan de hand van het voorbeeld op winformsfaq een zelfgemaakte DataGridTextBoxColumn gemaakt.
( zie http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q480q)
Ik wil alleen geen combobox maar m'n eigen textbox neerzetten.
Werkt op zich prima, maar als ik met de tab-toets naar die kolom wil navigeren in m'n datagrid, wordt deze geskipt. Hij krijgt heel kort de focus, maar die verschuift daarna naar de volgende kolom.
Als ik de kolom niet van m'n zelfgemaakte type maak, krijgt werkt het wel goed, dus het moet ergens in de onderstaande code veroorzaakt worden.
Als ik er met de debugger doorheen ga, krijgt de kolom soms wel focus. Het lijkt dus iets met events te maken te hebben.
(De DataGridTextBoxColumn heeft een TextBox property, die heb ik ook geprobeerd te overriden, maar dat werkt niet.)
Het uiteindelijke doel van al deze code is het tonen van een ","
in plaats van een "." in de grid, wanneer de "." toets op het numerieke pad wordt aangeslagen.
Dat klinkt op zich redelijk omslachtig, maar tot nu toe lijkt het de enige oplossing.
Andere ideeen zijn ook welkom natuurlijk.
( zie http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q480q)
Ik wil alleen geen combobox maar m'n eigen textbox neerzetten.
Werkt op zich prima, maar als ik met de tab-toets naar die kolom wil navigeren in m'n datagrid, wordt deze geskipt. Hij krijgt heel kort de focus, maar die verschuift daarna naar de volgende kolom.
Als ik de kolom niet van m'n zelfgemaakte type maak, krijgt werkt het wel goed, dus het moet ergens in de onderstaande code veroorzaakt worden.
Als ik er met de debugger doorheen ga, krijgt de kolom soms wel focus. Het lijkt dus iets met events te maken te hebben.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| public class OrderCommaTextBoxColumnColor : OrderTextBoxColumnColor
{
private UserControls.CommaTextBox cTxt;
private System.Windows.Forms.CurrencyManager _source;
private int _rowNum;
private bool _isEditing;
private static int rowCount;
public static int RowCount
{
get
{
return rowCount;
}
}
public OrderCommaTextBoxColumnColor() : base()
{
_source = null;
_isEditing = false;
rowCount = -1;
cTxt = new UserControls.CommaTextBox();
cTxt.Leave += new EventHandler(LeaveTextBox);
cTxt.GotFocus += new EventHandler(TextBoxStartEditing);
}
private void TextBoxStartEditing(object sender, EventArgs e)
{
_isEditing = true;
base.ColumnStartedEditing((Control) sender);
}
private void HandleScroll(object sender, EventArgs e)
{
if(cTxt.Visible)
cTxt.Hide();
}
private void LeaveTextBox(object sender, EventArgs e)
{
if(_isEditing)
{
SetColumnValueAtRow(_source, _rowNum, cTxt.Text);
_isEditing = false;
Invalidate();
}
cTxt.Hide();
this.DataGridTableStyle.DataGrid.Scroll -= new EventHandler(HandleScroll);
}
protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
{
base.Edit(source,rowNum, bounds, readOnly, instantText , cellIsVisible);
_rowNum = rowNum;
_source = source;
cTxt.Parent = this.TextBox.Parent;
cTxt.Location = this.TextBox.Location;
cTxt.Size = new Size(this.TextBox.Size.Width, cTxt.Size.Height);
cTxt.Text = this.TextBox.Text;
this.TextBox.Visible = false;
cTxt.Visible = true;
this.DataGridTableStyle.DataGrid.Scroll += new EventHandler(HandleScroll);
cTxt.BringToFront();
cTxt.Focus();
}
protected override bool Commit(System.Windows.Forms.CurrencyManager dataSource, int rowNum)
{
if(_isEditing)
{
_isEditing = false;
SetColumnValueAtRow(dataSource, rowNum, cTxt.Text);
}
return true;
}
protected override void ConcedeFocus()
{
base.ConcedeFocus();
}
protected override object GetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum)
{
return base.GetColumnValueAtRow(source, rowNum);
}
protected override void SetColumnValueAtRow(System.Windows.Forms.CurrencyManager source, int rowNum, object value)
{
if ( value != Convert.DBNull && value != null && value.ToString() != string.Empty)
base.SetColumnValueAtRow(source, rowNum, value);
}
} |
(De DataGridTextBoxColumn heeft een TextBox property, die heb ik ook geprobeerd te overriden, maar dat werkt niet.)
Het uiteindelijke doel van al deze code is het tonen van een ","
in plaats van een "." in de grid, wanneer de "." toets op het numerieke pad wordt aangeslagen.
Dat klinkt op zich redelijk omslachtig, maar tot nu toe lijkt het de enige oplossing.
Andere ideeen zijn ook welkom natuurlijk.
Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt