فراخوانی رویدادهایی از command و line های تکثیر شده -ویژوال بیسیک

فراخوانی رویدادهایی از command و line های تکثیر شده ؟؟؟

سلام...
می خوام برنامه ای بنویسم که این امکان رو بده تا درون یک picturebox, بتونم line هایی رو ترسیم کنم و به ازای هر line , یک command هم ایجاد کنم.تا اینجای کار , به لطف این سایت خوب, انجام شده ولی یه مشکلی دارم که اگه کمک کنید ممنون می شم;
میخوام بعضی رویدادهای مربوط به command و line رو به جریان بیندازم ولی تعداد این کنترلها نامعلومه بنابرین نمیشه از قبل واسه همه شون کدنویسی کرد.البته کدها تقریبا مشابه اند (مثلا می خوام وقتی رو هر لاین یا کامندی کلیک می کنم یه form باز بشه و...)
چطور می تونم رویدادهای مربوط به هر command یا line رو در موقع لزوم به جریان بندازم؟؟؟
 

the_king

مدیرکل انجمن
در ویژوال بیسیک 6، ما می توانیم با WithEvents برای یک شیء Event هایش را کنترل کنیم، و می توانیم
صدها شیء مجزا را با WithEvents تعریف کنیم، ولی بصورت صریح ویژوال بیسیک این اجازه رو به ما نمی ده که
آرایه ای از این شیء ها را کنترل کنیم :

کد:
You can declare as many individual variables as you like using WithEvents,
but you can't create [B]arrays[/B] with WithEvents.

به همین دلیل است که شما بایستی از ابتدا اولین عضو از آرایه ای از کنترل ها را روی فرم قرار داده باشید.
نحوه اینکار ساده است، ابتدا یک کنترل مثلا PictureBox یا CommandButton و ... روی فرم قرار دهید و در بین
مشخصه های آن، مقدار Index را روی 0 قرار دهید. اکنون شما اولین عضو از آرایه کنترل ها را ایجاد کرده اید.

اگر Index وجود نداشت، کنترل یک نمونه بود و تابع Event مربوطه پارامتری برای Index نداشت :
کد:
Private Sub Command1_Click()

اما اگر Index تعریف شود، کنترل ها توسط Index از هم تفکیک می شوند و پارامتر Index اضافه می شود :
کد:
Private Sub Command1_Click(Index As Integer)

حالا رخداد مورد نظرتان را برای کنترل بنویسید، در لیست پارامتر های رخداد (مثلا Click)، اولین پارامتر Index
است که شماره اندیس کنترلی را مشخص می کند که رخداد روی آن انجام شده، مثلا اگر دکمه شماره 4
فشار داده شود، مقدار Index برابر 4 خواهد بود.
شما می توانید برای هر مقدار Index را برای یک کار خاصی در نظر بگیرید، مثلا اگر Index برابر 2 بود،
کار ویژه ای انجام شود که با حالتی که مقدار 1 بود، متفاوت باشد.

یک مثال ساده، یک کنترل CommandButton با همان نام پیشفرض Command1 روی فرم قرار داده و مقدار
Index را در مشخصه هایش روی 0 تنظیم کنید و کد زیر را به فرم اضافه کنید :

کد:
Private Sub Command1_Click(Index As Integer)
    If Index = 0 Then
        Load Command1(Command1.UBound + 1)
        With Command1(Command1.UBound)
            .Move Int(Rnd * (Width - .Width)), Int(Rnd * (Height - .Height - 600))
            .Caption = CStr(Command1.UBound)
            .Visible = True
        End With
    Else
        MsgBox Index
    End If
End Sub

اکنون روی دکمه اولیه و همچنین سایر دکمه هایی که بعد از فشار دکمه اولیه بوجود می آیند، کلیک کنید.
 
روش تشخیص قرار داشتن موس روی یک line ؟؟؟

سلام و ممنون از پاسخ خوبتون...
یک ابهام برام باقی مونده; آیا لاین هایی که با متد line ترسیم میشن رویدادی ندارند؟لاین هایی که در زمان design روی form قرار میدیم چطور؟
(این سوال رو واسه این می پرسم که می خواستم با اومدن موس روی هر line یا با کلیک روی اون ,visible کامند مربوطه true بشه...)
اگه پاسخ منفیه,چطور می تونیم قرار گرفتن موس رو روی یک line تشخیص بدیم؟
(البته میشه در رویداد mousemove دستوراتی نوشت که مختصات موس رو در معادله تمام line ها قرار بده و... ولی برنامه خیلی کند میشه!)
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام و ممنون از پاسخ خوبتون...
یک ابهام برام باقی مونده; آیا لاین هایی که با متد line ترسیم میشن رویدادی ندارند؟لاین هایی که در زمان design روی form قرار میدیم چطور؟
(این سوال رو واسه این می پرسم که می خواستم با اومدن موس روی هر line یا با کلیک روی اون ,visible کامند مربوطه true بشه...)
اگه پاسخ منفیه,چطور می تونیم قرار گرفتن موس رو روی یک line تشخیص بدیم؟
(البته میشه در رویداد mousemove دستوراتی نوشت که مختصات موس رو در معادله تمام line ها قرار بده و... ولی برنامه خیلی کند میشه!)

Line و Shape و Label پنجره اختصاصی ندارند، در هنگامی که فرم ترسیم می گردد، در همان پنجره فرم رسم
می شوند. فکر می کنم بهتر باشد که بجای کنترل Line از یک کنترل UserControl که شبیه Line عمل کند،
استفاده نمایید.

نمونه چنین کنترلی (LineEx) که Event های Click و DblClick و MouseDown و MouseMove و MouseUp را دارد
ضمیمه پست کردم. مشخصه های استاندارد Line را در این کنترل قرار دادم.
 

پیوست ها

  • LineEx.zip
    2.3 کیلوبایت · بازدیدها: 13

جدیدترین ارسال ها

بالا