View Full Version : سوال: مخفی شدن کنترل های سمت راست فرم در حالت ریستور شدن فرم
atf1379
سه شنبه 17 مهر 1403, 15:52 عصر
سلام خدمت اساتید عزیز
در فایل ضمیمه فرمی قرار دارد که در قسمت عنوان اون تعدادی تکست باکس با عناوین مربوطه و یک لیست باکس در قسمت دیتیل فرم وجود دارد
خصوصیت HorizontalAnchor تکست باکس ها با لیبل های اونها در حالت Right تنضیم شده
اندازه سمت چپ لیست باکس صفر و اندازه عرض اون معادل عرض فرم یا Me.InsideWidth تنضیم شده
اگر خصوصیت HorizontalAnchor لیست باکس رو در حالت Both قرار بدهیم و در رویداد Form_Resize اندازه عرض اون رو تعیین نکنیم کنترل های فوق در حالت ماکسیمایز و ریستور شدن اون در قسمت سمت راست فرم قابل مشاهده می باشند ولی اگر اندازه عرض لیست باکس رو معادل Me.InsideWidth قرار بدهیم وقتی فرم ماکسیمایز میشود و بخواهیم دوباره اندازه فرم رو به حالت اول دربیاوریم کنترهای فوق قابل مشاهده نمی باشند .
با توجه به توضیحات بالا آیا راهی وجود دارد که اگر اندازه عرض لیست باکس رو معادل Me.InsideWidth تعیین شود موقعیت کنترها در سمت راست فرم در هر حالتی حفظ شود و قابل مشاهده باشند ؟ چون به دلایلی میخواهم تغییر عرض لیست باکس صرفاً از طریق تعیین اندازه اون صورت بگیره نه از طریق خصوصیت HorizontalAnchor
با تشکر
mehdi_fiz
سه شنبه 17 مهر 1403, 23:41 عصر
با سلام و احترام مشکل مربوط به کد Form_Resize می باشد.
atf1379
چهارشنبه 18 مهر 1403, 00:02 صبح
با سلام و احترام مشکل مربوط به کد Form_Resize می باشد.
با سلام و احترام متقابل
ممنونم بخاطر پیگیریتون
همونطور که در پست اول هم توضیح داده ام در حالتی که در رویداد Form_Resize اندازه عرض لیست باکس رو تعیین نکنیم و خصوصیت HorizontalAnchor اون رو برابر با Both قرار بدهیم مشکلی پیش نمیاد ولی همونطور که اشاره کرده ام در رویداد فوق میخوام اندازه عرض List1 رو از طریق List1.Width = Me.InsideWidth تنظیم بشه نه از طریق تغییر خصوصیت HorizontalAnchor
با تشکر
atf1379
چهارشنبه 18 مهر 1403, 00:12 صبح
فرض بفرمائید بجای لیست باکس از لیست ویو استفاده کنیم و میخواهیم اندازه عرض ستون ها و حاشیه چپ هر ستون در لیست ویو را بدست بیاریم و اگر خصوصیت HorizontalAnchor اون رو برابر با Both قرار بدهیم اندازه عرض و حاشیه چپ یا خصوصیت left واقعی ستون ها در حالت ماکسیمایز فرم بدست نمیاد
atf1379
پنج شنبه 19 مهر 1403, 12:22 عصر
اساتید عزیز ! راهکاری به ذهن مبارکشون نمیرسه ؟
eb_1345
پنج شنبه 19 مهر 1403, 16:54 عصر
همونطور که در پست اول هم توضیح داده ام در حالتی که در رویداد Form_Resize اندازه عرض لیست باکس رو تعیین نکنیم و خصوصیت HorizontalAnchor اون رو برابر با Both قرار بدهیم مشکلی پیش نمیاد ولی همونطور که اشاره کرده ام در رویداد فوق میخوام اندازه عرض List1 رو از طریق List1.Width = Me.InsideWidth تنظیم بشه نه از طریق تغییر خصوصیت HorizontalAnchor
با تشکر
با سلام
اگه در نظر دارین بدون استفاده از خصوصیت HorizontalAnchor کنترل های مد نظرتون رو در قسمت سمت راست فرم نمایش بدهین باید از دو تابع عمومی زیر استفاده کنین :
Dim CTL As Control
Public Sub SaveAnchorRightCtl(frm As Form)
For Each CTL In frm.Controls
If CTL.Tag = "AnchorRight" Then
CTL.Tag = CTL.Tag & "," & frm.InsideWidth - CTL.Left
End If
Next CTL
End Sub
Public Sub ResizeAnchorRightCtl(frm As Form)
On Error Resume Next
Dim i As Integer
For Each CTL In frm.Controls
If Split(CTL.Tag, ",")(0) = "AnchorRight" Then
CTL.Left = frm.InsideWidth - ((frm.InsideWidth - (frm.InsideWidth - Split(CTL.Tag, ",")(1))))
End If
Next CTL
End Sub
قبل از فراخوانی توابع فوق باید ابتدا در قسمت خصوصیت Tag کنترل هائی که میخواهین در سمت راست فرم قرار بگیرن کلمه AnchorRight را وارد کنین . استفاده از این کلمه در قسمت فوق بدین خاطر است که از بین همه کنترل های فرم اون کنترل هائی که قرار است در سمت راست فرم نمایش داده شوند انتخاب کنیم
بعد از وارد کردن کلمه فوق در تگ کنترل های مد نظر حالا نوبت به فراخوانی تابع اول در رویداد Form_Load و فراخوانی تابع دوم در رویداد Form_Resize میباشه
در تابع اول تعیین کرده ایم که از بین کنتر هایی که تگ اونها معادل کلمه AnchorRight میباشه موقعیت اولیه حاشیه سمت چپ کنترل رو در تگ کنترل ( البته با یک علامت جداکننده بعد از کلمه AnchorRight ) درج بشه
در تابع دوم خواستیم که از بین همه کنترهای فرم اون کنترل هائی که کلمه اول خصوصیت تگ اونها AnchorRight میباشه انتخاب بشه و موقعیت ثانویه سمت چپ کنترل های فوق رو معادل تفاوت موقعیت اولیه رو از مقدار عرض فرم بدست بیاره
eb_1345
پنج شنبه 19 مهر 1403, 17:53 عصر
ضماً برای سوال ثابت بودن موقعیت مکانی چند کنترل در سمت راست فرم (https://barnamenevis.org/showthread.php?589750-%D8%AB%D8%A7%D8%A8%D8%AA-%D8%A8%D9%88%D8%AF%D9%86-%D9%85%D9%88%D9%82%D8%B9%DB%8C%D8%AA-%D9%85%DA%A9%D8%A7%D9%86%DB%8C-%DA%86%D9%86%D8%AF-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D8%AF%D8%B1-%D8%B3%D9%85%D8%AA-%D8%B1%D8%A7%D8%B3%D8%AA-%D9%81%D8%B1%D9%85&p=2478417#post2478417) که در همین زمینه در تالار VB6 پرسیده ای نمونه ای ضمیمه نمودم
atf1379
جمعه 20 مهر 1403, 19:40 عصر
با سلام
اگه در نظر دارین بدون استفاده از خصوصیت HorizontalAnchor کنترل های مد نظرتون رو در قسمت سمت راست فرم نمایش بدهین باید از دو تابع عمومی زیر استفاده کنین :
Dim CTL As Control
Public Sub SaveAnchorRightCtl(frm As Form)
For Each CTL In frm.Controls
If CTL.Tag = "AnchorRight" Then
CTL.Tag = CTL.Tag & "," & frm.InsideWidth - CTL.Left
End If
Next CTL
End Sub
Public Sub ResizeAnchorRightCtl(frm As Form)
On Error Resume Next
Dim i As Integer
For Each CTL In frm.Controls
If Split(CTL.Tag, ",")(0) = "AnchorRight" Then
CTL.Left = frm.InsideWidth - ((frm.InsideWidth - (frm.InsideWidth - Split(CTL.Tag, ",")(1))))
End If
Next CTL
End Sub
قبل از فراخوانی توابع فوق باید ابتدا در قسمت خصوصیت Tag کنترل هائی که میخواهین در سمت راست فرم قرار بگیرن کلمه AnchorRight را وارد کنین . استفاده از این کلمه در قسمت فوق بدین خاطر است که از بین همه کنترل های فرم اون کنترل هائی که قرار است در سمت راست فرم نمایش داده شوند انتخاب کنیم
بعد از وارد کردن کلمه فوق در تگ کنترل های مد نظر حالا نوبت به فراخوانی تابع اول در رویداد Form_Load و فراخوانی تابع دوم در رویداد Form_Resize میباشه
در تابع اول تعیین کرده ایم که از بین کنتر هایی که تگ اونها معادل کلمه AnchorRight میباشه موقعیت اولیه حاشیه سمت چپ کنترل رو در تگ کنترل ( البته با یک علامت جداکننده بعد از کلمه AnchorRight ) درج بشه
در تابع دوم خواستیم که از بین همه کنترهای فرم اون کنترل هائی که کلمه اول خصوصیت تگ اونها AnchorRight میباشه انتخاب بشه و موقعیت ثانویه سمت چپ کنترل های فوق رو معادل تفاوت موقعیت اولیه رو از مقدار عرض فرم بدست بیاره
سلام جناب آقای بهرامی
درود بر شما
مطمئن بودم شما بر این مورد هم راه حلی پیدا می کنی
مثل همیشه عالی:تشویق::تشویق::تشویق:
eb_1345
شنبه 21 مهر 1403, 00:02 صبح
مطمئن بودم شما بر این مورد هم راه حلی پیدا می کنی
سلام
کار زیاد سختی نبود .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.