ورود

View Full Version : سوال: CheckBox فقط خواندنی



rezaprogrammer
جمعه 24 آذر 1391, 18:16 عصر
سلام. چطوری می تونیم CheckBox فقط خواندنی داشته باشم. یعنی بهترین راه برای فقط خواندنی کردن این کنترل چیه؟

rezaprogrammer
جمعه 24 آذر 1391, 19:05 عصر
سوال سخت نیست. میخام یه کد ساده و مختصر باشه

xxnagin
جمعه 24 آذر 1391, 19:10 عصر
سلام
منظورتون از CheckBox فقط خواندنی چیه
اگه میخوای کسی نتونه کلیک کنه enable رو false کن

rezaprogrammer
جمعه 24 آذر 1391, 19:36 عصر
سلام
ببینید در رویداد Validating مشخصه Cancel مربوط به e کار نمی کنه.
میخام یه همچین چیزی باشه. موقعی که کاربر روی اون کلیک می کنه هیچ تغییری نکنه. اگه از قبل Checked هست همانطور بمونه و اگه Unchecked هست باز هم همانطور بمونه. بدون اینکه مجبور باشم Enable رو Flase کنم.

tstsst
جمعه 24 آذر 1391, 21:41 عصر
سلام
تو کلیکش
Private Sub CheckBox1_Click(sender As Object, e As EventArgs) Handles CheckBox1.Click
If CheckBox1.Checked Then
CheckBox1.Checked = False
Else
CheckBox1.Checked = True
End If
End Sub

rezaprogrammer
جمعه 24 آذر 1391, 23:28 عصر
معلوم نیست که چک باکس چک شده هست یا خیر. موقع باز شدن پنجره وقتی از بانک اطلاعاتی اطلاعات رو میگیره تازه مشخص میشه که چک شده هست یا خیر. من میخام تو همون جا فریز بشه بدون اینکه Enable غیر فعال بشه از تغییر دادنش جلوگیری بشه.

rezaprogrammer
یک شنبه 26 آذر 1391, 11:16 صبح
خب کسی نبود مارو کمک کنه؟ یه سوال دیگه دارم از دوستان.
آیا میشه کلیک روی دکمه های سه گانه بالای یک فرم (مثل Close، Minimize و Maximaze) رو تحت کنترل درآورد. یعنی با کلیک روی این دکمه ها توسط کاربر رویداد اون اجرا بشه و ما بتونیم تحت کنترل درآوریم؟

rezaprogrammer
یک شنبه 26 آذر 1391, 11:36 صبح
دکمه Minimized و Maximized رو پیدا کردم. تو رویداد Resize مربوط به فرم فراخوانی میشن. ولی دکمه Close رو پیدا نکردم.

Private Sub FclsMain_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
Select Case Me.WindowState
Case FormWindowState.Maximized
MsgBox("Maximezed")
Case FormWindowState.Minimized
MsgBox("Minimized")
End Select
End Sub

tstsst
یک شنبه 26 آذر 1391, 11:57 صبح
بله می شه اون چکباکسم یک شرط در نظر بگیر که بعد از لود شودن اطلاعات اون اعمال صورت بگیره مثلا


Private Sub CheckBox1_Click(sender As Object, e As EventArgs) Handles CheckBox1.Click
if test = true then
If CheckBox1.Checked Then
CheckBox1.Checked = False
Else
CheckBox1.Checked = True
End If
End If
End Sub


و برای مینیمایز و ماکزیمایز

Me.MinimizeBox = False
Me.MaximizeBox = False

و اگه می خوایی همه رو غیر فعال کنی یک راهش اینه که formBorderStyle رو none بزاری
یک راهش اینه که تو رویداد های فورم مثلا در FormClosing رویدادو Cancel کنی

e.Cancel = True

و البته با این کد هم فقط کلید (X) یا همون خروج غیر فعال می شه و Alt+f4

Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim myCp As CreateParams = MyBase.CreateParams
myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
Return myCp
End Get
End Property

یا این

Private Declare Function EnableFC Lib "user32" (ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer
Private Declare Function GetSystem Lib "user32" (ByVal hwnd As Integer, ByVal revert As Integer) As Integer
Public Sub DisableFormCloseButton()
Select Case EnableFC(GetSystem(Me.Handle.ToInt32, 0), &HF060, &H0 Or &H1)
Case &H0
Case &H1
Case &HFFFFFFFF
End Select
End Sub


و برای فعال کردن

Private Declare Function GetSystem Lib "user32" (ByVal hwnd As Integer, ByVal revert As Integer) As Integer
Private Declare Function EnableFC Lib "user32" (ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer


و با این کد
EnableFC(GetSystemMenu(Me.Handle.ToInt32, 0), &HF060, &H0)

rezaprogrammer
یک شنبه 26 آذر 1391, 13:18 عصر
ممنون ولی من میخام اگه کاربر روی دکمه X فرم کلیک کرد. رویدادی که من میخام فعال بشه.

tstsst
یک شنبه 26 آذر 1391, 13:24 عصر
سلام
همون طور که گفتم


یک راهش اینه که تو رویداد های فورم مثلا در FormClosing رویدادو Cancel کنی

از این دو تا میتونی استفاده کنی FormClosed & FormClosing

Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed

End Sub

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing

End Sub

rezaprogrammer
یک شنبه 26 آذر 1391, 13:56 عصر
از اونا استفاده کردم. ولی فرقی برای vb.net نداره اینکه شما صریحاً روی دکمه X کلیک کنی یا با رویدادهای دیگه فرم بسته بشه

clupcd
یک شنبه 26 آذر 1391, 14:07 عصر
دکمه Minimized و Maximized رو پیدا کردم. تو رویداد Resize مربوط به فرم فراخوانی میشن. ولی دکمه Close رو پیدا نکردم.

Private Sub FclsMain_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
Select Case Me.WindowState
Case FormWindowState.Maximized
MsgBox("Maximezed")
Case FormWindowState.Minimized
MsgBox("Minimized")
End Select
End Sub
برای مدیریت دکمه close از رویداد formcloseing استفاده کنید

clupcd
یک شنبه 26 آذر 1391, 14:10 عصر
معلوم نیست که چک باکس چک شده هست یا خیر. موقع باز شدن پنجره وقتی از بانک اطلاعاتی اطلاعات رو میگیره تازه مشخص میشه که چک شده هست یا خیر. من میخام تو همون جا فریز بشه بدون اینکه Enable غیر فعال بشه از تغییر دادنش جلوگیری بشه.
شما در این کار باید از فیلد نوع checkbox دیتاگرید استفاده کنید و editing اون رو فالس کنید راحت.

دوستان به این تایپیک هم بیاین مشکل من رو حل کنید لطفا http://barnamenevis.org/showthread.php?374004-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AF%D8%B3%D8%AA-%D8%B3%D8%A7%D8%B2-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-vb.net

rezaprogrammer
یک شنبه 26 آذر 1391, 14:23 عصر
سرچ زدم کنترل سفارسی، api ، RaiseEvent برای X Botton پیدا کنم چیزی پیدا نشد.

tstsst
یک شنبه 26 آذر 1391, 14:52 عصر
نمی فهمم چه فرقی بین خارج شدن از فرم با بستن فرم هست ؟! هردو شون یک چیزن !!

ولی کلا می تونی یک کلید کنار مینیمایز و ... ازافه کنی و کلید خروج کلا غیر فعال و تو رویداد اون کلید کدتو بنویسی توهمین سایت خیلی وقت پیش دیده بودم سرچ کن شاید حل شد سوالت؟!

شرمنده اینو من بلد نیستم.

rezaprogrammer
یک شنبه 26 آذر 1391, 17:10 عصر
ممنونم. فکر می کنم تنها کاری که بشه کرد همینه.
خب تو بعضی از کارها بهتر میشه یک سری چیزها رو کنترل کرد.
مثلاً من میخام توی فرمم وقتی روی دکمه Close کلیک می کنیم قبلش یه پارامتری داده بشه که هنگام اجرای رویداد Form Closing بتونیم مثلاً اگه لازم باشه پنجره محاوره ای اطمینان از بسته شدن فرم نمایش داده بشه یا نمایش داده نشه. من توی فرمم میخام موقعی که پنجره توسط سیستم بسته میشه حتماً پنجره اطمینان از خروج نمایش داده بشه. بر عکس اگه کاربر خودش میخاد پنجره رو ببنده در شرایط پنجره بسته بشه که جدول من اطلاعات داره. اگه اطلاعات نداشته باشه لزومی نداره که پنجره محاوره ای رو نمایش بده و...
اینها یک مثال هستند.
من امروز وقت ندارم. اگه وقت کردم سرچ می زنم چیزی پیدا بشه یا نه. برای حذف دکمه X میشه راحت کاری کرد ولی برای قراردادن یک آیکون دیگه کدی رو نمیشناسم

shahryari
یک شنبه 26 آذر 1391, 17:15 عصر
برای جلوگیری از بسته شدن فرم در رویداد FormClosing بنویس e.cancel=True

shahryari
یک شنبه 26 آذر 1391, 17:27 عصر
برای غیر فعال کردن دکمه قرمز رنگ ضربدر ، کد زیر را به خارج ار هر رویدادی بنویس



Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim myCp As CreateParams = MyBase.CreateParams
myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
Return myCp
End Get
End Property

tstsst
یک شنبه 26 آذر 1391, 17:37 عصر
ممنونم. فکر می کنم تنها کاری که بشه کرد همینه.
خب تو بعضی از کارها بهتر میشه یک سری چیزها رو کنترل کرد.
مثلاً من میخام توی فرمم وقتی روی دکمه Close کلیک می کنیم قبلش یه پارامتری داده بشه که هنگام اجرای رویداد Form Closing بتونیم مثلاً اگه لازم باشه پنجره محاوره ای اطمینان از بسته شدن فرم نمایش داده بشه یا نمایش داده نشه. من توی فرمم میخام موقعی که پنجره توسط سیستم بسته میشه حتماً پنجره اطمینان از خروج نمایش داده بشه. بر عکس اگه کاربر خودش میخاد پنجره رو ببنده در شرایط پنجره بسته بشه که جدول من اطلاعات داره. اگه اطلاعات نداشته باشه لزومی نداره که پنجره محاوره ای رو نمایش بده و...
اینها یک مثال هستند.
من امروز وقت ندارم. اگه وقت کردم سرچ می زنم چیزی پیدا بشه یا نه. برای حذف دکمه X میشه راحت کاری کرد ولی برای قراردادن یک آیکون دیگه کدی رو نمیشناسم

همونطور که تاحالا 3 نفر گفتن از فرمکلوزینگ استفاده کن با چند شرط
من نمی دونم جدول شما چجوری یا از چه نوعیی برای همین شرط پر بودن یا نبودن شو نزاشتم

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If MsgBox("", MsgBoxStyle.OkCancel) = MsgBoxResult.Cancel Then
e.Cancel = True
End If
End Sub
برای بستن بدون پرسیدن اون پیغام هم از این هرجا خواستی استفاده کن
End

rezaprogrammer
یک شنبه 26 آذر 1391, 17:52 عصر
رویداد Closing فرم من اینجوریه

Private BlnIsUserClosedForm As Boolean
Private Sub FclsNewChequeBook_FormClosing(sender As Object,
e As System.Windows.Forms.FormClosingEventArgs) _
Handles Me.FormClosing
Dim R As DialogResult

If BlnIsUserClosedForm = False Or DtvChequeList.RowCount >= 1 Then
R = MessageBox.Show("آیا مطمئن به خروج از این بخش هستید؟",
"خروج از بخش", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading)
End If
If R = System.Windows.Forms.DialogResult.No Then
e.Cancel = True
End If
End Sub
بخش بالا میگه اگه جدول ردیف داشت و همچنین اگر متغیر BlnIsUserClosedForm = False باشد باید پنجره رو نمایش بده.

این هم مربوط به رویداد Validating که در قسمت Catch من میخام که فرم پیغام بده و بعد بسته بشه. پس مجبور شدم از یک متغیر استفاده کنم:
Catch InvEx As System.InvalidCastException
If MessageBox.Show("توجه: این بخش مربوط به وارد کردن چک هایی است که شماره سریال" &
vbCrLf & "آنها به صورت ترتیبی از یک تا تعداد مجموع دسته چک می باشد",
"ورود سری چک", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) _
= System.Windows.Forms.DialogResult.Cancel Then
DialogResult = System.Windows.Forms.DialogResult.Cancel
BlnIsUserClosedForm = False

این متغیر:
BlnIsUserClosedForm = False
یعنی کاربر نمیخاد فرم بسته بشه. بلکه خواست برنامه هست. پس باید پیغام نمایش داده بشه.

فرم من یک دکمه خروج هم داره اگه روی اون کلیک کنم این کد اجرا میشه:
BlnIsUserClosedForm = True و بعد پنجره بسته میشه. اگه جدول DataGrid من خالی باشه بدون نمایش پنجره محاوره ای فرم رو می بنده.

اگه رویداد دکمه X هم دست من بود می تونستم اگه کد BlnIsUserClosedForm = True رو در اونجا هم قرار بدم که خیالم راحت بشه.
ولی اگه نشه برنامه درست کار می کنه ولی مطمئن نیستم باگ نداشته باشه