PDA

View Full Version : کمک برای طراحی دکمه backspace در vb.net



ali_novel
پنج شنبه 11 شهریور 1389, 10:41 صبح
سلام دوستان عزیز من تازه شروع به کار با vb.net کردم.
چند روز پیش یه برنامه نوشتم می خواستم یه دکمه تو برنامه طراحی کنم که کار دکمه backspace کی برد رو انجام بده و مثلاً برای پاک کردن کارکترهای یک textbox نیاز به استفاده از کی برد نباشه و با استفاده از این دکمه بشه کارکترهای textbox رو یکی یکی پاک کرد.
ممنون می شم اگه کمک کنید:بوس:

Saman_12
پنج شنبه 11 شهریور 1389, 10:44 صبح
کد اسکی این دکمه 8 هست.

ali_novel
پنج شنبه 11 شهریور 1389, 10:49 صبح
کد اسکی این دکمه 8 هست.
خوب این کد رو چطور باید توی بلوک این دکمه کد نویسی کنم تا جواب بده؟؟؟
اگه امکانش هست تکه کدش رو بنویسید

Saman_12
پنج شنبه 11 شهریور 1389, 11:04 صبح
شما توی رویداد کلیک باتونتون بنویسید :


SendKeys.SendWait("{Backspace}")


یا توی Key press تکست باکستون بنویسید :


If MsgBox("Do you want deleted", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
e.KeyChar = Chr(8)
End If

کد بالا وقتی شما کلیدی رو می فشارید از تون سوال می کنه پاکش کنه یا نه اگه روی Yes کلیک کنید پاک میشه و اگر نه وارد تکست میشه.

محسن شامحمدی
پنج شنبه 11 شهریور 1389, 11:14 صبح
فکر می کنم این کد
With TextBox1
.Text = .Text.Substring(0, .Text.Length - 1)
End With
هم تا حدی بدرد بخوره نه؟:متفکر:

ali_novel
پنج شنبه 11 شهریور 1389, 12:03 عصر
سامان جان با توجه به تکه کد اول که گذاشتید برای باتون اگه ما تو برنامه بیشتر از یک textbox داشته باشیم سیستم چطور تسخیص می ده که Backspace رو روی کدوم textbox باید اعمال کنه؟با استفاده از tabindex تشخیص میده یا نه؟

salehbagheri
پنج شنبه 11 شهریور 1389, 12:11 عصر
سامان جان با توجه به تکه کد اول که گذاشتید برای باتون اگه ما تو برنامه بیشتر از یک textbox داشته باشیم سیستم چطور تسخیص می ده که Backspace رو روی کدوم textbox باید اعمال کنه؟با استفاده از tabindex تشخیص میده یا نه؟

ببینید کد ایشون دکمه BackSpace رو شبیه سازی میکنه! شما تصور کنید که با زدن باتون درواقع دکمه Backspace رو زدید. بنابراین عملیات حذف فقط بر روی Textbox فعال انجام میشه و اگه هیچ TextBox ی فعال نباشه هیچ اتفاقی نمی افته ...

مگر اینکه در بخش کد دکمه Button قبل از ارسال دکمه Backspace، بر روی یکی از Textbox ها Focus کنید.

nasim bahari
پنج شنبه 11 شهریور 1389, 12:16 عصر
سامان جان با توجه به تکه کد اول که گذاشتید برای باتون اگه ما تو برنامه بیشتر از یک textbox داشته باشیم سیستم چطور تسخیص می ده که Backspace رو روی کدوم textbox باید اعمال کنه؟با استفاده از tabindex تشخیص میده یا نه؟

دوست عزیز....

قبل از دستور sendkey با متد Select اون تکست باکس مورد نظر رو انتخاب کن.



TextBox1.Select()
SendKeys.SendWait("{backSpace}")


موفق باشین

ali_novel
پنج شنبه 11 شهریور 1389, 12:24 عصر
خیلی خیلی لطف کردید بابت کمکتون.
جواب سوالاتم رو گرفتم.
واقعاً سایت خوب و فعالی دارید.
جواب سوالاتم رو گرفتم

ali_novel
شنبه 13 شهریور 1389, 12:35 عصر
فکر می کنم این کد
With TextBox1
.Text = .Text.Substring(0, .Text.Length - 1)
End With
هم تا حدی بدرد بخوره نه؟:متفکر:
دوستان عزیز کدها رو تست کردم و کد بالا بهترین کدی بود که می شد استفاده کرد اما وقتی textbox خالی می شد error می داد کد کامل رو براتون می زارم.

If TextBox1.TextLength <> 0 Then
With TextBox1
.Text = .Text.Substring(0, .Text.Length - 1)
End With
End If

کدی که دوست عزیزمون نسیم داد textbox رو کامل پاک می کنه و به صورت کارکتر به کارکتر پاک نمی کنه ولی فکر کنم با یه تغییرات جزئی اون کد هم کار کنه اگه کسی این تغییرات رو بلده لطفاً راهنمایی کنه.
کد نسیم:

TextBox1.Select()
SendKeys.SendWait("{backSpace}")

salehbagheri
شنبه 13 شهریور 1389, 19:38 عصر
کدی که دوست عزیزمون نسیم داد textbox رو کامل پاک می کنه و به صورت کارکتر به کارکتر پاک نمی کنه ولی فکر کنم با یه تغییرات جزئی اون کد هم کار کنه اگه کسی این تغییرات رو بلده لطفاً راهنمایی کنه.

علتش این هست که قبل از حذف از متد Select استفاده شده. وقتی کل متن داخل TextBox انتخاب بشه طبیعی هست که با زدن یک دکمه backspace همگی حذف میشن.

من قبلاً هم گفتم که باید Focus کنید نه Select !

nasim bahari
شنبه 13 شهریور 1389, 20:06 عصر
دوستان عزیز کدها رو تست کردم و کد بالا بهترین کدی بود که می شد استفاده کرد اما وقتی textbox خالی می شد error می داد کد کامل رو براتون می زارم.

If TextBox1.TextLength <> 0 Then
With TextBox1
.Text = .Text.Substring(0, .Text.Length - 1)
End With
End If
کدی که دوست عزیزمون نسیم داد textbox رو کامل پاک می کنه و به صورت کارکتر به کارکتر پاک نمی کنه ولی فکر کنم با یه تغییرات جزئی اون کد هم کار کنه اگه کسی این تغییرات رو بلده لطفاً راهنمایی کنه.
کد نسیم:

TextBox1.Select()
SendKeys.SendWait("{backSpace}")


سلام....

دوست عزیز

اون کدی که گذاشتم مشکلی نداره و کار می کنه......البته من باید از متد Focus برای بدست آوردن فوکوس تکست باکس مورد نظر استفاده می کردم و در تمامی حالات این متد جواب نمی ده و برای بدست آوردن فوکوس از متد Select استفاده کردم....که این کار باعث میشه که علاوه بر اینکه فوکوس به تکست باکس داده بشه ، متن اون هم به حالت انتخاب در بیاد ولی ما فقط کار اول اون رو می خوایم......پس به VB کلک می زنیم اون هم به صورت زیر



TextBox4.Select()
TextBox4.DeselectAll()

SendKeys.SendWait("{backSpace}")


موفق باشین

mohsen_csharp
شنبه 13 شهریور 1389, 20:58 عصر
نقل قول:
نوشته شده توسط 09111111111 http://barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=1084922#post1084922)
فکر می کنم این کد
With TextBox1
.Text = .Text.Substring(0, .Text.Length - 1)
End With
هم تا حدی بدرد بخوره نه؟:متفکر:

دوستان عزیز کدها رو تست کردم و کد بالا بهترین کدی بود که می شد استفاده کرد اما وقتی textbox خالی می شد error می داد کد کامل رو براتون می زارم

کجای این کد بهترین کد هست؟
این کد فقط می تونه از آخر پاک کنه اگه کابر بخواد از وسط پاک کنه چی؟
من با C#‎‎ نوشتم کاملا هم کار می کنه خودت به vb تبدیل کن


public Form1()
{
InitializeComponent();
foreach (Control item inthis.Controls)
{
item.Enter+=newEventHandler(Control_Enter);
item.Leave += newEventHandler(Control_Leave);
}
}
privatevoid button1_Click(object sender, EventArgs e)
{
SendKeys.Send("\b");
}
privatevoid Control_Enter(object sender, EventArgs e)
{
Control cont = sender asControl;
if (LeavedControl != null && cont.Name == "button1")
{
this.LeavedControl.Focus();
}
}
Control LeavedControl;
privatevoid Control_Leave(object sender, EventArgs e)
{
this.LeavedControl = sender asControl;
}

nasim bahari
شنبه 13 شهریور 1389, 23:46 عصر
کجای این کد بهترین کد هست؟
این کد فقط می تونه از آخر پاک کنه اگه کابر بخواد از وسط پاک کنه چی؟
من با C#‎‎‎ نوشتم کاملا هم کار می کنه خودت به vb تبدیل کن


public Form1()
{
InitializeComponent();
foreach (Control item inthis.Controls)
{
item.Enter+=newEventHandler(Control_Enter);
item.Leave += newEventHandler(Control_Leave);
}
}
privatevoid button1_Click(object sender, EventArgs e)
{
SendKeys.Send("\b");
}
privatevoid Control_Enter(object sender, EventArgs e)
{
Control cont = sender asControl;
if (LeavedControl != null && cont.Name == "button1")
{
this.LeavedControl.Focus();
}
}
Control LeavedControl;
privatevoid Control_Leave(object sender, EventArgs e)
{
this.LeavedControl = sender asControl;
}


سلام
دوست عزیز لطفاً از ادبیات بهتری برای خطاب به دیگران استفاده کنید.....دوست خوبم 09111111111 اون چیزی رو که دوستمون خواسته بودن یعنی شبیه سازی دکمه BackSpace رو گذاشتن ....در ضمن کد خود من هم منطقی و هم کوچکتر است......در حالی که کد شما !

فقط جهت اطلاع :
دکمه BackSpace را وقتی فشار می دهید اگر کرسر در یک متن باشد یک کارکتر قبل از خود را حذف می کند.

درخواست دوستمون هم همین بود که با کد من جواب می ده و نیازی هم نیست که شما از در تالار VB کد C# بزارین و به یکی از فعالین تالار ( 0911111111) توهین کنید

موفق باشین

mohsen_csharp
یک شنبه 14 شهریور 1389, 00:28 صبح
سلام
دوست عزیز لطفاً از ادبیات بهتری برای خطاب به دیگران استفاده کنید.....دوست خوبم 09111111111 اون چیزی رو که دوستمون خواسته بودن یعنی شبیه سازی دکمه BackSpace رو گذاشتن ....در ضمن کد خود من هم منطقی و هم کوچکتر است......در حالی که کد شما !

فقط جهت اطلاع :
دکمه BackSpace را وقتی فشار می دهید اگر کرسر در یک متن باشد یک کارکتر قبل از خود را حذف می کند.

درخواست دوستمون هم همین بود که با کد من جواب می ده و نیازی هم نیست که شما از در تالار VB کد C#‎‎ بزارین و به یکی از فعالین تالار ( 0911111111) توهین کنید
دوست عزیز سلام
من به کسی توهین نکردم
من می دونم که دکمه BackSpace را وقتی فشار می دهید اگر کرسر در یک متن باشد یک کارکتر قبل از خود را حذف می کند به همین خاطر از کد دوستمون ایراد گرفتم چون با کد دوستمون فقط میشه از آخر تکست باکس پاک کرد نه از اونجایی که مکان نما اون جاست !!!
در ضمن کد من کامل هست و هیچ نقصی نداره و رو هرچند تا کنترل که رو فرم داشته باشیم کار می کنه و کاملا قابل فهم هست !!!
اینم کد vb که دیگه جای هیچ حرف و حدیثی نباشه

Public Sub New (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/.ctor())()
Me.InitializeComponent (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/InitializeComponent())
Dim item As Control (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control)
For Each item In MyBase.Controls (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control/property:Controls:System.Windows.Forms.Control.Con trolCollection)
AddHandler item.Enter (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control/event:Enter:System.EventHandler), New EventHandler (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.EventHandler)(AddressOf Me.Control_Enter (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/Control_Enter(Object,System.EventArgs)))
AddHandler item.Leave (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control/event:Leave:System.EventHandler), New EventHandler (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.EventHandler)(AddressOf Me.Control_Leave (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/Control_Leave(Object,System.EventArgs)))
Next
End Sub

Private Sub button1_Click (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/button1_Click(Object,System.EventArgs))(ByVal sender As Object (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object), ByVal e As EventArgs (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.EventArgs))
SendKeys (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.SendKeys).Send (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.SendKeys/Send(String))(ChrW(8))
End Sub

Private Sub Control_Enter (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/Control_Enter(Object,System.EventArgs))(ByVal sender As Object (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object), ByVal e As EventArgs (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.EventArgs))
Dim cont As Control (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control) = TryCast(sender,Control (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control))
If ((Not Me.LeavedControl (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/LeavedControl:System.Windows.Forms.Control) Is Nothing) AndAlso (cont.Name (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control/property:Name:String) = "button1")) Then
Me.LeavedControl (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/LeavedControl:System.Windows.Forms.Control).Focus (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control/Focus():Boolean)
End If
End Sub

Private Sub Control_Leave (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/Control_Leave(Object,System.EventArgs))(ByVal sender As Object (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object), ByVal e As EventArgs (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.EventArgs))
Me.LeavedControl (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://test:1.0.0.0/test.Form1/LeavedControl:System.Windows.Forms.Control) = TryCast(sender,Control (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System.Windows.Forms:2.0.0.0:b77a5c561934e089/System.Windows.Forms.Control))
End Sub

ali_novel
دوشنبه 15 شهریور 1389, 12:20 عصر
دوستان بیشتر از پیش مشتاق شدم که برنامه نویسی رو ادامه بدم، واقعاً ازتون ممنونم .
یه سوال دیگه برام پیش اومده:
می خوام مثلاً وقتی که کلید A رو روی صفحه کلید فشار می دم button A که روی صفحه برنامم طراحی کردم عمل بکنه مثل اینکه روی button A کلیک کرده باشم منظورم اینه که نمی خوام به صورت مستقیم توی textbox تایپ کنم، اینکار رو با sendkey می تونم انجام بدم؟!
یا از روش دیگه ای باید استفاده کنم

modirmasool
دوشنبه 15 شهریور 1389, 15:50 عصر
دوستان بیشتر از پیش مشتاق شدم که برنامه نویسی رو ادامه بدم، واقعاً ازتون ممنونم .
یه سوال دیگه برام پیش اومده:
می خوام مثلاً وقتی که کلید A رو روی صفحه کلید فشار می دم button A که روی صفحه برنامم طراحی کردم عمل بکنه مثل اینکه روی button A کلیک کرده باشم منظورم اینه که نمی خوام به صورت مستقیم توی textbox تایپ کنم، اینکار رو با sendkey می تونم انجام بدم؟!
یا از روش دیگه ای باید استفاده کنم

برنامه ضمیمه رو نگاه کنین. توجه کنین که key preview فرم باید true باشه.

nasim bahari
دوشنبه 15 شهریور 1389, 17:11 عصر
دوستان بیشتر از پیش مشتاق شدم که برنامه نویسی رو ادامه بدم، واقعاً ازتون ممنونم .
یه سوال دیگه برام پیش اومده:
می خوام مثلاً وقتی که کلید A رو روی صفحه کلید فشار می دم button A که روی صفحه برنامم طراحی کردم عمل بکنه مثل اینکه روی button A کلیک کرده باشم منظورم اینه که نمی خوام به صورت مستقیم توی textbox تایپ کنم، اینکار رو با sendkey می تونم انجام بدم؟!
یا از روش دیگه ای باید استفاده کنم

سلام.........

دوست عزیز نیازی به SendKey نیست.....شما اول باید کاری کنین که هر کلیدی که فشرده میشه اول به فرم فرستاده بشه و نه به کنترل دیگری....که برای این کار خاصیت KeyPreview فرم رو True می کنید ......حال در رویداد KeyPress فرم چک می کنید که حرف وارد شده A هست یا نه......حال اگر A بود از متد PerfromClick باتن مورد نظر برای کلیک او ن استفاده کنید به این صورت :

Buton1.perfromClick


البته فکر می کنم که دوست خوبمون جناب مدیرمسئول هم همین برنامه رو واسه شما گذاشته باشن ....فقط خواستم توضیح داده باشم

موفق باشین

ali_novel
دوشنبه 15 شهریور 1389, 19:01 عصر
دوستان راهنمایی هاتون اینقدر خوب هست که من رو مجبور می کنه واسه هر تاپیکتون یه تشکر بزارم . من شرایطم خیلی خاصه و جایی که هستم امکان نصب visual studio نیست و هفته ای یکی دو مرتبه تو خونه فقط می رسم کار کنم واسه همینه که چند وقت یک بار رو همون مسائل سوال واسم پیش میاد خلاصه اینکه از اینکه مارو تحمل می کنید ممنوم