
نوشته شده توسط
atf1379
همونطور که در پست اول هم توضیح داده ام در حالتی که در رویداد 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 میباشه انتخاب بشه و موقعیت ثانویه سمت چپ کنترل های فوق رو معادل تفاوت موقعیت اولیه رو از مقدار عرض فرم بدست بیاره