Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

C#

private void C1trueDBGrid1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{
// 如果它不是一个字母或数字,则取消用户的键入。
if (! e.Keychar.IsLetterOrDigit(e.KeyChar])

{
e.Handled = true ;
}
}


更多关于主题相关的信息以及本地.NET事件,请参阅MSDN 或 .NET 帮助。

...

Visual Basic

Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit
With Me.C1TrueDBGrid1.Columns(e.ColIndex)

' 如果这不能在"Done"列中完成,或者如果用户鼠标点击了,这时它就会继续。
If .DataField <> "Done" Or e.KeyChar = Chr(0) Then Exit Sub

' 取消常规编辑并设置字段为基于KeyChar的适当的结果,如果输入无效的字符就会蜂鸣。
Select Case UCase(e.KeyChar)
Case "Y"
.Value = -1
Case "N"
.Value = 0

Case Else
Beep()
End Select
End With
End Sub


To write code in C#

C#

private void C1TrueDBGrid1_BeforeColEdit( object sender,
C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e)
{
C1.Win.C1DataColumn col = e.Column.DataColumn;

// 如果这不能在"Done"列中完成,或者如果用户鼠标点击了,这时它就会继续。
if (col.DataField != "Done"e.KeyChar == 0 ) return;

// 取消常规编辑并设置字段为基于KeyChar的适当的结果,如果输入无效的字符就会蜂鸣。

e.Cancel = true; switch (e.KeyChar. .ToUpper()) {
case "Y"; Col.Value = -1; break; case "N"; Col.Value = 0; default:; Beep();
}
}


注意,当KeyChar为0,事件件处理将终止,因此鼠标编辑仍然被允许。

...

C#

private void Form1_Load(System.object sender, System.EventArgs e) {
C1TrueDBGrid1.MarqueeStyle = MarqueeEnum.SolidCellBorder;
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="dfefac72-cf7d-4577-ab6b-d2bc431425dc"><ac:plain-text-body><![CDATA[ C1TrueDBGrid1.Splits[0].DisplayColumns["Comments"].Button = true;
]]></ac:plain-text-body></ ac:structured-macro>
// 冗余,因为默认值为True。
C1TrueDBGrid1.EditDropDown = true;
}
private void C1TrueDBGrid1_ButtonClick(object sender,
C1.Win.C1TrueDBGrid.ColEventArgs e)
{
// 单元格置为编辑模式。
this.c1TrueDBGrid1.EditActive = true;
}

...

WinForms版版True DBGrid 可以在许多TextBox 类型控件中支持标准文本选择属性:

Property

Description

SelectionLength

设置/返回所选择文本的长度。

SelectionStart

设置/返回所选择文本的起始位置。

 

 

Property

Description

SelectedText

设置/返回所选择文本。

Image Modified 注意注意: 这些属性仅在网格处于编辑模式中有效,也就是说它的EditActive 属性为True

...

 

...

 

 输入掩码

使用控件的NumberFormat 属性显示列数据的格式,如果用户需要编辑一个格式化的列,最好的方法是在编辑过程中
保持了一致的格式,WinForms版版True DBGrid 提供了一个EditMask 可选择属性与NumberFormat 属性确保数据输入的一致性。

...

\ 下一个字符作为文字
> 转换字母为大写
< 转换字母为小写
例如:
To write code in Visual Basic

Visual Basic

' 设置掩码因而用户可以输入一个电话号码,使用可选区域代码和大写状态。
Me.C1TrueDBGrid1.Columns(0).EditMask = "(###) 000-0000 St\ate\: >LL"

To write code in C#

C#

// 设置掩码因而用户可以输入一个电话号码,使用可选区域代码和大写状态

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="34efdaec-760f-4d2f-b506-be4d87d208cc"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Columns[0].EditMask = "(###) 000-0000 St\\ate


: >LL";

]]></ac:plain-text-body></ac:structured-macro>

 使用掩码来格式化

尽管EditMask 属性可以用于指定一个网格中数据的格式化显示,如果列的NumberFormat 属性未被指定,网格可以简单的显示缓存文本(剥离文字),如果NumberFormat 属性被指定,网格会发送缓存文本用以显示格式。由于常见的输入和显示格式都是相同的,NumberFormat 属性有一个Edit Mask 选项,如果该选项被选择,此时EditMask 属性设置将被用于数据输入和显示,然而输入和显示格式不需要相同,因此一个NumberFormat 选项不同于可以被选择的EditMask 属性。

...

为了启用C1DisplayColumn 对象的单元格按钮,可以在代码中设置它的Button 属性为True
To write code in Visual Basic

Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).Button = True

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="c3ac6417-095a-4384-98cd-e9c517210705"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].Button = true;

]]></ac:plain-text-body></ac:structured-macro>

当列的DropDown 属性被设置为C1TrueDBDropDown 控件名称时,Button 属性也可以被启用,或者与ValueItemCollection 对象相关联的Presentation 属性被设置为组合框选项之一。
默认情况下,单元格内按钮仅在当前单元格中显示,其显示如下图:

然而,通过设置列的ButtonAlways 属性为True,您可以使单元格内按钮显示在每一行中:

...

为了在一个C1DisplayColumn对象中绘制当前单元格为一个非编辑指令按钮,在代码中设置它的ButtonText 属性为True :
To write code in Visual Basic

Visual Basic

Me.C1TrueDBGrid1.Splits(0).DisplayColumns(0).ButtonText = True

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="635ff9da-f0e5-4b6e-a597-7e0aa4b5eb74"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Splits[0].DisplayColumns[0].ButtonText = true;

]]></ac:plain-text-body></ac:structured-macro>

当在列中的一个单元格被聚焦时,它会将单元格文本作为标题绘制一个标准窗口指令,单元格文本不能自动居中,但代表列的水平和垂直对齐设置:

如果ButtonButtonText 属性被设置为True 时,ButtonText属性优先。
由于使用了默认单元格内按钮,设置列的ButtonAlways 属性为True 可以使全部单元格显示为指令按钮,然而,聚焦矩形框仅在当前单元格中绘制:

...

Visual Basic

Private Sub C1TrueDBGrid1_ButtonClick(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.ColEventArgs) Handles C1TrueDBGrid1.ButtonClick

To write code in C#

C#

private void C1TrueDBGrid1_ButtonClick( object sender,
C1.Win.C1TrueDBGrid.ColEventArgs e)

当单元格内按钮被点击后它总是被触发,无论它们是否通过ButtonButtonText启用,ButtonClick事件示例在之前的章节使用文本使用文本 (Section 11.3)中呈现了。

...

Visual Basic

Me.C1TrueDBGrid1.Columns(0).ButtonPicture =
System.Drawing.Image.FromFile("dollar.bmp")

To write code in C#

C#

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b294509e-2891-4cbd-a8ae-231eca3ad569"><ac:plain-text-body><![CDATA[

this.c1TrueDBGrid1.Columns[0].ButtonPicture =

]]></ac:plain-text-body></ac:structured-macro>

System.Drawing.Image.FromFile("dollar.bmp");


网格会自动绘制相应的向上/向下状态地边缘,因此仅需要提供按钮内部的图像。

...

To write code in Visual Basic

Visual Basic

Private Sub C1TrueDBGrid1_BeforeColEdit(ByVal sender As Object, ByVal e As
C1.Win.C1TrueDBGrid.BeforeColEditEventArgs) Handles C1TrueDBGrid1.BeforeColEdit
Dim r As Rectangle =
Me.C1TrueDBGrid1.Splits(0).GetCellBounds(Me.C1TrueDBGrid1.Row, e.ColIndex)

r = Me.C1TrueDBGrid1.RectangleToScreen(r)

r = Me.RectangleToClient(r)

Me.ListBox1.Left = r.Left
Me.ListBox1.Top = r.Bottom
End Sub

To write code in C#

C#

private void c1TrueDBGrid1_BeforeColEdit(object sender,
C1.Win.C1TrueDBGrid.BeforeColEditEventArgs e)
{

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1d6ee914-9d2e-4318-9487-986b70a56c81"><ac:plain-text-body><![CDATA[ Rectangle r = this.c1TrueDBGrid1.Splits[0].GetCellBounds(this.c1TrueDBGrid1.Row, e.ColIndex); r = this.c1TrueDBGrid1.RectangleToScreen(r); r = this.RectangleToClient(r); this.ListBox1.Left = r.Left; this.ListBox1.Top = r.Bottom;]]></ac:plain-text-body></ac:structured-macro>

}

  1. 将代码放在下拉或组合框中,通过将所选的值分配给正在编辑的列的文本或值属性完成编辑过程。

...