Araç ipucunu yazdırmayı yönetmek ve fare hücrenin üzerindeyken görünür olmasını sağlamak için birkaç şey yapılması gerekir. Form myForm olarak adlandırılırken, ızgaramın örnek kaynağımda myGrid olarak adlandırıldığını unutmayın.
biz 2 yardımcı değişkenleri tanımlayan yapmanız gereken ilk şey gerekir:
private ToolTip _tooltip;
private Point _mouse;
Sonra araç ipucu tanımlamak ve biz
ihtiyaç etkinlik için özel bir işleyici tanımlamak gerekir gerekir
public myForm()
{
InitializeComponent();
....//your additional initialization code
_tooltip = new ToolTip();
this.myGrid.CellEditorInitialized += myGrid_CellEditorInitialized;
this.myGrid.CellValidating+= myGrid_CellValidating;
}
hücre doğrulama işlemine ilişkin kod oldukça basittir:
private void myGrid_CellValidating(object sender, CellValidatingEventArgs e)
{
string errorText = string.Empty;
// Are we really on a column currently?
if (e.ColumnIndex >= 0)
{
if (e.Value == null)
{
errorText = "No field may be empty";
}
}
// Has an error occured? If so don't let the user out of the field until its corrected!
if (errorText != string.Empty)
{
e.Cancel = true;
}
e.Row.ErrorText = errorText;
e.Row.Cells[e.Column.Name].ErrorText = errorText;
}
bu biz yapıldıktan sonra editör ne tür gerçekten
private void myGrid_CellEditorInitialized(objec sender, GridViewCellEventArgs e)
{
RadTextBoxEditor radTextBoxEditor = e.ActiveEditor as RadTextBoxEditor;
RadTextBoxEditorElement editorElement = radTextBoxEditor.EditorElement as RadTextBoxEditorElement;
editorElement.AutoToolTip = true;
TextBox myTextBox= (TextBox)editorElement.TextBoxItem.HostedControl;
myTextBox.MouseMove -= new MouseEventHandler(textBox_MouseMove);
myTextBox.MouseLeave -= new EventHandler(textBox_MouseLeave);
myTextBox.MouseMove += new MouseEventHandler(textBox_MouseMove);
myTextBox.MouseLeave += new EventHandler(textBox_MouseLeave);
}
Böylece ilk ne olursa olsun editörü (bir "metin kutusu" olsun: celleditor başlatıldığında, araç ipucu gerektiğinde durumunda hazır olduğundan emin olmak gerekir Orada) ve bu metin kutusu için ihtiyaç duyacağımız olayları belirleyelim, çünkü kullanıcının fare üzerinde ne zaman olduğunu bilmemiz gerekir.
void textBox_MouseMove(object sender, MouseEventArgs e)
{
if (mousePos != e.Location)
{
RadTextBoxEditor radTextBoxEditor = this.myGrid.ActiveEditor as RadTextBoxEditor;
GridDataCellElement gridCellElement = radTextBoxEditor.OwnerElement as GridDataCellElement;
if (gridCellElement != null && gridCellElement.ContainsErrors)
{
RadTextBoxEditorElement radTextBoxEditorElement = radTextBoxEditor.EditorElement as RadTextBoxEditorElement;
TextBox myTextBox = (TextBox)radTextBoxEditorElement.TextBoxItem.HostedControl;
_tooltip.Show(gridCellElement.RowInfo.Cells[gridCellElement.ColumnInfo.Name].ErrorText, myTextBox, new Point(e.Location.X + 8, e.Location.Y + 8));
_mouse = e.Location;
}
}
}
biz de ipucu yine mouseLeave olay ile ilgisi olan kaybolması gerekir Bundan sonra: ipucu gösterilecektir ZAMAN
sonraki adım böylece mousemove fonksiyonunu tanımlamaktır
bu adımlar kullanım hücreye fare hareket ve o hücreyi terk ettiğinde tekrar kaybolduğunda görünen bir araç ipucu var ile bitmiş
void textBox_MouseLeave(object sender, EventArgs e)
{
RadTextBoxEditor radTextBoxEditor = this.myGrid.ActiveEditor as RadTextBoxEditor;
RadTextBoxEditorElement radTextBoxEditorElement = radTextBoxEditor.EditorElement as RadTextBoxEditorElement;
TextBox myTextBox = (TextBox)radTextBoxEditorElement.TextBoxItem.HostedControl;
Rectangle textBoxBounds = new Rectangle(myTextBox.PointToScreen(Point.Empty), myTextBox.Size);
if (!textBoxBounds.Contains(Control.MousePosition))
{
_tooltip.Hide(textBox);
}
}
.
Önceki yorumumu bir noktada yaptığınız gibi "mouseover" (veya daha fazla mousemove) olayını kullanarak doğru bir çözüm olduğunu, ancak tek bir parçası olmasa da olası bir çözümün parçası. – Thomas