ورود

View Full Version : مشکل در ارتباط بااستفاده از کنترل lvbutton



unforgiven
یک شنبه 01 اسفند 1389, 11:54 صبح
سلام به همگی
یه سوال داشتم در مورد استفاده از دکمه هایی به جز دکمه های استاندارد ویژوال بیسیک .
مشکل اینه که وقتی از دکمه ای به جز command خود ویژوال بیسک استفاده می کنم مثل chamelon یا lvbutton چه به صورت ocx و چه به صورت ctl
تو فرم هایی که والد هستند خاصیت چایلد اونا فعال شده و قراره با کلیک بر روی دکمه, فرم فرزند نشون داده بشه کنترل فرم فرزند از دست برنامه نویس خارج میشه .

مثلا فرم والد من form1 هست و خاصیت چایلد اون فعال شده و روش دکمه lvbutton قرار داره و باید form2 رو نشون بده البته در وسط فرم والد چون خاصیتش رو بر روی centerOwner قرار دادم اما موقع نمایش فرم 2 , اون رو وسط جایی که دکمه lvbutton قرار داره نشون میده نه وسط فرم والد .

آیا راهی برای رفع این مشکل وجود داره ؟
پیشاپیش ممنونم

محسن واژدی
یک شنبه 01 اسفند 1389, 13:31 عصر
سلام علیکم
اگر ممکنه یک نمونه کار یا تصویری قرار بدین تا بهتر بهتر بتوانیم مشکل را بررسی کنیم

unforgiven
یک شنبه 01 اسفند 1389, 15:20 عصر
من نمونه مشکل رو ضمیمه این پست کردم .
توضیحات بیشتر رو داخل فرم نوشتم
متشکرم

محسن واژدی
یک شنبه 01 اسفند 1389, 17:09 عصر
مشکل از کنترل lvbutton نیست درواقع مشکل از هیچ کجا نیست،
ببخشید گیجتون کردم، توضیح میدم

این ویژگی CenterOwner هست که باعث این شده است در واقع وقتی StartUpPosition فرمی با CenterOwner تنظیم شود اون فرم وسط فرم احضار کننده نمایش داده میشود، UserControlها هم ویژگی هایی شبیه فرم ها را دارا میباشند با این تفاوت که خودشان در فرمی قرار میگیرند و وقتی از طریق یک usercontrol فرمی که position آن با CenterOwner تنظیم شده باشد ظاهر شود Owner فرم ظاهر شده با مکان UserControl تنظیم میشود در نتیجه فرم ظاهر شده (که در سوال شما Form2 هست) در وسط Owner احضار کننده اش -که UserControl است- قرار میگیرد و چون lvbuttonاز نوع UserControl هست فرم ظاهر شده را در وسط خودش قرار میدهد

نمونه تون رو ویرایش کردم و برای درک بیشتر توضیحات بنده یک usercontrol را به عنوان اضافه کرده که وقتی روش کلیک کنین دوباره form2 بجای فرم اضلی وسط usercontrol ظاهر میشه

و اینگونه که برمیاد تنها راه حل این مشکل تنظیم کردن StartUpPosition فرم با CenterScreen میباشد
امیدوارم توضیحات واضح بوده باشند
موفق باشید
یاعلی

unforgiven
یک شنبه 01 اسفند 1389, 17:52 عصر
ممنون از وقتی که گذاشتید و توضیحاتی که دادید.
من خودم هم سنتر اسکرین رو امتحان کرده بودم ولی می خواستم به صورت owner فرم نمایش داده بشه .
ظاهرا چاره ای نیست باید از سنتر استفاده کنم .
بازم ممنونم

محسن واژدی
یک شنبه 01 اسفند 1389, 19:22 عصر
کدی که در زیر نوشتم کار CenterOwner را انجام میده کافیه اونو در ماژول عمومی کنین انشاء الله مشکلتون برطرف میشه




Private Sub lvButtons_H1_click()
ShowCenterOwnerForm Me, Form2, True
End Sub

Public Sub ShowCenterOwnerForm(MainForm As Form, _
SubForm As Form, _
Optional IsModal As Boolean)

If MainForm.Name = SubForm.Name Then Err.Raise -345354, , "Ilegal type" & vbNewLine & "The main form name '" & MainForm.Name & "' is same with subform name '" & SubForm.Name & "'"

Dim lft&, tp&, plft&, ptp&, getMF

If MainForm.MDIChild = True Then


For Each getMF In Forms

If TypeOf getMF Is MDIForm Then
If Not getMF.WindowState = vbMinimized Then
plft& = getMF.Left
ptp& = getMF.Top
End If

Exit For

End If

Next getMF

End If

Call Load(SubForm)

With MainForm

If SubForm.Width < MainForm.Width Then

lft& = plft& + (.Left + (.Width * 0.5)) - (SubForm.Width * 0.45)
ElseIf SubForm.Width = MainForm.Width Then '

lft& = MainForm.Left
Else

lft& = (MainForm.Left - (SubForm.Width * 0.5)) + (MainForm.Width * 0.5)
End If

If SubForm.Height < MainForm.Height Then

tp& = ptp& + (.Top + (.Height * 0.5)) - (SubForm.Height * IIf(ptp& > 0, 0.3, 0.5))
ElseIf SubForm.Height = MainForm.Height Then

tp& = MainForm.Top
Else

tp& = (MainForm.Top - (SubForm.Height * 0.5)) + (MainForm.Height * 0.5)
End If

SubForm.Move lft&, tp&
End With

If IsModal Then
SubForm.Show vbModal
Else
SubForm.Show
End If

End Sub

موفق باشید

unforgiven
دوشنبه 02 اسفند 1389, 12:21 عصر
جناب واژدی سلام
از کدی که گذاشتید ممنونم . کد شما فرم رو از نظر عرضی درست در وسط فرم والد نشون میده ولی از نظر طولی وسط نیست و بالاتر از فرم والد اون رو نشون میده . البته اگه طولش هم دقیقا وسط فرم واد قرار میگرفت عالی میشد .
به هر حال ازتون ممنونم

محسن واژدی
دوشنبه 02 اسفند 1389, 22:05 عصر
جناب واژدی سلام
از کدی که گذاشتید ممنونم . کد شما فرم رو از نظر عرضی درست در وسط فرم والد نشون میده ولی از نظر طولی وسط نیست و بالاتر از فرم والد اون رو نشون میده . البته اگه طولش هم دقیقا وسط فرم واد قرار میگرفت عالی میشد .
به هر حال ازتون ممنونم

علیکم السلام با عرض معذرت، کد پست قبل فقط برای فرم های معمولی بود و متوجه فرم های MDI و Child نبودم، مجدددا کدهای پست قبل را ویرایش کردم
امیدوارم درست باشه
موفق باشید

unforgiven
سه شنبه 03 اسفند 1389, 00:08 صبح
کد جدید رو هم تست کردم مثل قبلی هست. شما می تونید کد جدیدتون رو روی سورس بالایی چک کنید و نتیجه رو ببینید . البته خاصیت استارتاپ فرم 2 باید روی منوال ست شود .
ممنونم

محسن واژدی
سه شنبه 03 اسفند 1389, 00:38 صبح
درسته، اگر Position فرم از حالت Manual خارج شود کدها بگونه ای دیگر عمل خواهند کرد همانطور که خودتان هم دیده اید، البته میتوانیم کدها را تغییر بدهیم که حتی اگر Position فرم هم تنظیم شده باشد به درستی عمل کنند که برای این بایستی خاصیت Modal فرم را غیرفعال کنیم به عبارتی نباید فرم را modal ظاهر کرد اما بقول معروف از چاله در اومدیم افتادیم توچاه؛ وقتی که این مشکل کوچک را از این راه کردیم یک مشکل بزرگتر یعنی غیرفعال شدن modal فرم ظاهر میشود، که خاصیت modal خیلی در برنامه مهم است؛

در انتها پیشنهاد بنده هم این است که برای درست عملکردن کدها کافیه Position فرم را بر روی Manual تنظیم کنید چون این کد خودش Position صحیح فرم را برایتان تنظیم میکند

موفق باشید
یاحق

unforgiven
سه شنبه 03 اسفند 1389, 11:24 صبح
من از کد شما استفاده کردم و کارم رو راه انداخت البته مایل بودم که اون مشکل طولی هم حل بشه که متاسفانه هنوز پا برجاست ولی مشکل اصلی رو با کد شما حل کردم . بازم ممنونم
موفق باشید

محسن واژدی
سه شنبه 03 اسفند 1389, 16:21 عصر
سلام علیکم
فکر کنم فرمتون رو هنوز بر روی Manual تنظیم نکرده باشین، چون این کده رو در سورس پروژتون گذاشتم دیدم خاصیت Manualش انتخاب نشده بود و وقتی روی Manual گذاشتمش مشکل قرارگیری طولی فرم هم برطرف شد، همچنین کمی تغییر هم داخل کد دادم،
سورس زیر را ببینین، انشاء الله درسته

یا علی

unforgiven
چهارشنبه 04 اسفند 1389, 11:08 صبح
سلام
فرمایش شما درسته و کد به خوبی کار می کنه برای فرم های معمولی , نه برای فرم MDI که فرم child هم داشته باشه . در فرم mdi این مشکل هنوز وجود داره و من بعید می دونم برای فرم MDI بشه درستش کرد .
شما همین سورس رو اگر فرم 1 رو چایلد فرم MDI کنید و فرم 2 رو لود کنید متوجه منظور بنده می شوید .
از وقتی که واسه این پست گذاشتید ممنونم