سلام
حالت عادی وقتی نشانگر موس روی تکست باکس میبریم tooltip برای زمان کمی نمایش داده میشه ولی
میخوام تا موقعی که فوکوس روی تکست باکس هست و داریم داخل تکست باکس تایپ میکنیم tooltip نمایش داده بشه...
ایا راهی هست؟
سلام، بابت تاخیر متاسفم؛
یادمه داخل
Visual Basic میشد خیلی راحت برای هر
Event پاسخ نوشت (
Responding to Mouse and Keyboard Events)، در نتیجه نسخت لازم است Event های مورد نیازمان را پیدا کنیم. در مسیر زیر تمامی Event های پشتیبانی شده توسط vb (به ترتیب حروف الفبا) در سایت msdn قرار دارند:
Visual Studio ->
Visual Basic 6.0 ->
Resource Center ->
Product Documentation ->
Reference ->
Language Reference ->
Events
Event هایی که برای این کار میتوانیم از آنها استفاده کنیم عبارتند از:
Click Event (رویداد کلیک کردن)
The
MouseDown OR
MouseUp Event (شبیه رویداد بالایی است)
The
EnterFocus AND
GotFocus Event (رویداد فوکوس شبیه انتخاب شدن کردن)
حالا باید برای هرکدام از Event های بالا تعریف کنیم که، زمانی که هر کدام از Events های
TextBox Control رخ دهد، شما
ToolTip Control بسازی یا اگر از قبل ساخته شده است آن را فراخوانی کنید و حتما در
ToolTip Property (خصوصیات ToolTip) گزینه ای باشه که مقدار TimeOut تعیین کرد.
متاسفانه vb ندارم که بررسی کنم اما با جست و جوی عبارت "show tooltip when focused visual basic" به این چند تکه کد برخوردم؛
مثال اول -
توضیح (
لینک) :
نقل قول: The Enter and Leave events are probably useful here, and show it with a duration of 0 to keep it there
Note: Calling the Show(...) method twice like in my example will force the "pointer" to point correctly to the control
مثال اول - کد :
کد:
private ToolTip tt;
private void textBox1_Enter(object sender, EventArgs e) {
tt = new ToolTip();
tt.InitialDelay = 0;
tt.IsBalloon = true;
tt.Show(string.Empty, textBox1);
tt.Show("I need help", textBox1, 0);
}
private void textBox1_Leave(object sender, EventArgs e) {
tt.Dispose();
}
مثال دوم -
توضیح (
لینک) :
نقل قول: tooltip is a control, needs to be added from toolbox
مثال دوم - کد :
کد:
private void textbox_Enter(object sender, EventArgs e)
{
toolTip1.Show("your tip here", textbox);
}
private void textbox_Leave(object sender, EventArgs e)
{
toolTip1.Hide(textbox);
}
پیوست؛ من تازه متوجه مشکل شدم و راستش دلم نیومد توضیحات قبلی و پاک کنم
اینطوری که من متوجه شدم قضیه اینکه وقتی ToolTip نمایش داده میشود و کاربر شروع به تایپ کردن میکند، ToolTip محو میشود. درسته؟
خب دو تا راه حل است؛
اولیش اینطوریه که با استفاده از Event های مربوط به کیبورد مثل
KeyPress,
KeyDown,
KeyUp و یا
Change استفاده کنیم و در پاسخ هر بار ToolTip نمایش دهیم.
نمونه
کد:
کد:
Private Sub Form_Load()
'Initialization tooltip
With Me.txtToolTip
.Visible = False
.Appearance = 0
.BackColor = &H80000018
End With
Text1.ToolTipText = "Hey this is Text1!"
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
showtoolTip Text1
End Sub
Private Sub Text1_GotFocus()
showtoolTip Text1
End Sub
Private Sub showtoolTip(pTB As TextBox)
With Me.txtToolTip
.Height = Me.TextHeight(pTB.ToolTipText)
.Width = Me.TextWidth(pTB.ToolTipText) + 100
.Left = pTB.Left
.Top = pTB.Top + pTB.Height
.Text = pTB.ToolTipText
.ZOrder
.Visible = True
End With
End Sub
Private Sub Text1_LostFocus()
Me.txtToolTip.Visible = False
End Sub
راه حل دوم؛ دو تا TextBox میسازی (به نام های مثلا علی و رضا) که اندازه TextBox اولی (علی) بزرگتر از TextBox دومی (رضا) باشه بعد TextBox رضا میزاری روی TextBox علی (که بزرگتره) جوری که یه خورده از TextBox علی معلوم باشه؛ اونوقت TextBox علی از فرم (Form) برنامه Hide کن؛ بعدش وقتی Event های مربوط به انتخاب، فوکوس و شروع تایپ کردن فراخوانی شد با تابع
SetCursorPos مکان موس و تغییر بده به جایی که TextBox علی از پشت رضا زده بیرون و معلوم باشه.