PDA

View Full Version : غیر اتوماتیک کردن toolTip



rezatati
چهارشنبه 16 اردیبهشت 1388, 02:37 صبح
با سلام خدمت دوستان
می خواستم بدونم که راهی وجود داره که کنترل toolTip رو خودمون بدست بگیریم و هروقت خواستیم اونو نشون بدیم و هر وقت خواستیم مخفی کنیم و دیگه با ماوس کارنکنه یعنی وقتی ماوس رو رو کنترل ببریم toolTip خود به خود به نمایش در نیاد آیا راهی هست یا نه

البته من الان تو برنامه ای که دارم می نویسم اینجوری از ش استفاده می کنم


toolTip1.Show("لطفا نام بانک را وارد نمایید .", txtBankname, 4000);

ولی وقتی ماوس رو رو تکست باکس مربوطه میبرم بازهم toolTip به نمایش در میاد که نمیخوام این اتفاق بیفته
با تشکر از دوستان

khaste_007
چهارشنبه 16 اردیبهشت 1388, 06:53 صبح
با سلام
دوست عزیز شما برای این کار می توانید یک ایونت هندلر برای رویداد Popup مربوط به toolTip بنویسید.
برای توضیحات بیشتر سناریو زیر رو ملاحظه کنید:
فرض کنید شما به کاربر این امکان را می دهید که انتخاب کند آیا toolTip ها نمایش داده بشوند یا نه ما نتیجه آن را در متغییر از نوع bool با نام ShowTOOL قرار می دهیم.
حال در در زمان لود فرم به tooltip مقدار داده و یک ایونت هندلر برای popup اضافه می کنیم.

private void Form2_Load(object sender, EventArgs e)
{
toolTip1.SetToolTip(button1, "دیدی ندیدی");

toolTip1.Popup += new PopupEventHandler(toolTip1_Popup);
}
و در نهایت خود ایونت هندلر رو به شکل زیر می نویسیم.

void toolTip1_Popup(object sender, PopupEventArgs e)
{
if (ShowTOOL == false)
{
e.Cancel = true;//<--یا این دستور

e.ToolTipSize = new Size(0, 0);//<-- یا این دستور
}
}
توضیح اینکه هر یک از دستور های درون if را که بنویسید نتیجه خواهد داد.
موفق باشید.

rezatati
پنج شنبه 17 اردیبهشت 1388, 01:51 صبح
با تشکر از دوست عزیر
ولی مثل اینکه منظور منو متوجه نشدین اصلا کاربر برنامه نقشی تو این قضیه نداره
و من خودم می خوام که کنترل رو بدست بگیرم مثلا فرض کن که یک تکست باکس داریم که کد مشتری رو دریافت می کنه به محض این که کاربر کدی رو تو این تکست باکس می زنه برنامه اطلاعات او مشتری رو تو تکست باکسهای مربوطه لود می کنه و اگه کد مشتری نامعتبر باشه به جای پیغام خطا و یا مسیج باکس از تول تیپ استفاده کردم که تو ی یک تول تیپ مینویسه که مشتری با این کد وجود نداره و حالا مشکل من اینه که موقعی که یک کد نامعتبر در تکست باکس بزنیم و بعد کنترل برنامه به یک تکست باکس دیگه می ره حالا با تب یا کلیک ماوس وقتی که کنترل برنامه به تکست باکس کد مشتری برمی گرده یعنی تو رویداد Enter تکست باکس من دوباره چک می کنم که کد معتبرهستش یا نه اگه نبود دوباره تول تیپ رو نشون می دم ولی حالا اگه با ماوس کلیک کنیم روی تکست باکس همه چی به هم میریزه یعنی وقتی ماوس رو تکست باکس هست تول تیپ نشون داده می شه و وقتی ماوس می ره روی یک کنترل دیگه تول تیپ مخفی می شه و من نمی خوام این طور بشه
با تشکر از دوستان

khaste_007
پنج شنبه 17 اردیبهشت 1388, 05:12 صبح
ولی مثل اینکه منظور منو متوجه نشدین اصلا کاربر برنامه نقشی تو این قضیه نداره

با سلام دوباره
دوست عزیز مثل اینکه شما جواب من رو با دقت نخوندید این فقط یک مثال بود و شما مثلا می توانید هر شرطی را با توجه به نیاز خودتون در if چک کنید مثلا برای این مسئله که شما در اینجا بیان کردید در حال معمولی متغییر showTool را برابر false قرار دهید تا با رفتن کاربر بر روی تکست باکس چیزی نمایش داده نشود و فقط وقتی که خواستید پیغام شما ظاهر شود showTool را برابر true قرار دهید و تمام.
و بعد از تمام، باید بگم که آقا این سناریویی که شما در پست دومتون گفتید راه خیلی ساده تر و البته استاندارد داره و اون استفاده از کنترل ErrorProvider هست استفاده از اون شبیه همین toolTip هست من یه مثال کوچولو اینجا قرار میدم امیدوارم انتظار نداشته باشی دقیقا با مسئله شما جور باشه و خودت تغییرات لازم رو بدی.
این مثال یک مثال ساده از بکار گیری ErrorProvider هست.
یک فرم جدید بسازید و یک TextBox یک Button و یک ErrorProvider به آن اضافه کنید.
سپس بروی Button دو بار کلیک و در رویداد کلیک آن کد زیر را بنویسید.

private void button1_Click(object sender, EventArgs e)
{
errorProvider1.Clear();
errorProvider1.SetError(textBox1, "این یک پیغام خطای نمونه می باشد");
}
حالا فرم رو اجرا و بروی دکمه کلیک کنید و نتیجه رو مشاهده کنید.
توضیح: با توجه به منطق برنامه خود، این کارها را می توانید در هر رویدادی انجام دهید و یا طبق شرایط خاصی، مثلا نبودن اطلاعات در دیتا بیس و ... پیغام را نشان دهید و پس از برطرف شدن شرایط، مثلا با کدerrorProvider1.Clear(); پیغام خطا را از جلوی دید کاربر حذف کنید.
موفق و پیروز باشید.