PDA

View Full Version : سوال: نحوه تعیین location در فرم



aftabeshargh
چهارشنبه 16 فروردین 1391, 11:16 صبح
سلام
اینکه بخوایم تو یه فرم در حالت ماکسیمایز یه کنترل رو در موقعیت دلخواه مکان بدیم به چه صورته ؟ یعنی مثلا اگه بخوایم به یه usercontrol آدرس بدیم که به زدن دکمه بره به سمت راست ترین نقته در فرم و یا در مرکز فرم و....

Hybrid
چهارشنبه 16 فروردین 1391, 11:43 صبح
سلام ، کد زیر گوشه ی بالا سمت چپ دکمه 1 رو به نقطه ی 20,20 میبره


Button1.Location = New Point(20, 20)

به دلخواه تغییر بدین.واسه اینکه به وسط فرم بره شما عرض فرم رو تقسیم بر 2 میکنین و به عنوان x نقطه قرار میدین واسه y هم همینطور.

aftabeshargh
چهارشنبه 16 فروردین 1391, 11:51 صبح
سلام
ممنون از راهنمایی تون " خب اون دستور رو میدونم اما منظورم یه چیز دیگست
مثلا برا یه usercontrol که یه دکمه روشه و این usercontrol رو روی یه فرم میزاریم " شما توی این دکمه کد بزارید که با کلیک روی دکمه این usercontrol به سمت راست ترین قسمت فرم به آهستگی حرکت کنه یعنی درقسمت dock=right فرم قرار بگیره و روی یه دکمه دیگه کدی بزارید که دوباره به مرکز فرم قرار بگیره.. وقتی فرم max هستش توی دکمه usercontrol چطور طول و عرض فرم رو بگیریم

aftabeshargh
چهارشنبه 16 فروردین 1391, 12:29 عصر
دوستان لطفشونو دریغ نکنن

tstsst
چهارشنبه 16 فروردین 1391, 13:07 عصر
سلام
پایین راست:

Button1.Location = New Point(Me.Width, Me.Height)

و با کم و زیاد کردن x,y می تونی نسبت به طول و عرض فرم جابجا کنید
برای مثال :

Button1.Location = New Point(Me.Width - 100, Me.Height - 100)

و برای حرکت از همان نقطه به نقطه مورد نظر :

For i = Button1.Location.X To Me.Width
Button1.Location = New Point(i, Me.Height / 2)
Next
یا :

For i = Button1.Location.X To Me.Width
For abc = Button1.Location.Y To Me.Height
Button1.Location = New Point(i, abc)
Next
Next

aftabeshargh
چهارشنبه 16 فروردین 1391, 14:10 عصر
سلام
یه برنامه خالی میزارم دوستان اگه کاملش کنن ممنون میشم :بامزه:

ممنون

xxnagin
چهارشنبه 16 فروردین 1391, 16:55 عصر
سلام
من طبق نمونه ای که گذاشتین اینو درست کردم که فکر کنم همین باشه


'در یوزر کنترل
Public panel1 As Panel
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
Timer2.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Width -= 5
If Me.Width > -5 Then
panel1.Width += 5
panel1.Top -= 2
End If
If Me.Width = 0 Then
panel1.Top = Me.Top + 2
Timer1.Enabled = False
End If
Me.ParentForm.Text = panel1.Top
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
If Me.Top = 0 Then
Timer2.Enabled = False
End If
End Sub
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.ParentForm.Dock = DockStyle.Right
panel1 = New Panel
End Sub


'در فرم
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
End Sub
Private Sub Location1_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Location1.SizeChanged
If Location1.Width > 350 Then
Location1.Width = 350
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Location1.Width += 5
Panel1.Top += 2
Panel1.Width -= 5
If Panel1.Top > 133 Then
Panel1.Top = 133
End If
Panel1.Width = Location1.Left - 10
If Location1.Width = 350 Then
Timer1.Enabled = False
End If
End Sub
Public Sub New()
InitializeComponent()
Location1.panel1 = Panel1
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = Panel1.Top
End Sub

tstsst
چهارشنبه 16 فروردین 1391, 18:19 عصر
سلام

85192

تایمر برای سرعتشه

xxnagin
چهارشنبه 16 فروردین 1391, 19:37 عصر
ولی فکر نمیکنی وقتی که دکمه نمایش را که میزنی یوزرکنترل یه بار به طرف چپ میره و تایمر غیر فعال بشه و اگر چند بار هم اگه بزنی دکمه نمایش دیگه کار نکنه
ولی اینجوری 5 بار که دکمه نمایش رو بزنی کلا یوزرکنترل محو میشه و دیگه بدرد نمیخوره ودوباره باید راه اندازی بشه و دکمه بستن دیگه وجود نداره که یوزر کنترل به سمت راست بیاد

aftabeshargh
چهارشنبه 16 فروردین 1391, 20:12 عصر
سلام

ولی اینجوری 5 بار که دکمه نمایش رو بزنی کلا یوزرکنترل محو میشهبرای این قسمت که شما میگید " درسته باید یه تغییر کوچیک تو دستورات دوستمون جناب tstsst (http://barnamenevis.org/member.php?161733-tstsst)
داد و یه شرط گذاشت که وقتی یه بار نمایش داده میشه تا وقتی دوباره محو نشده اجازه تکرار کد رو نداد .

با دستورات زیر برای یک usercontrol با داشتن عرض فرم اصلی عملیاتش انجام میشه :




Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim i, t As Integer
If m = 1 Then
t = Location1.Width
Do While Not t = i
i += 1
Location1.Width = t - 1
Location1.Location = New Point(Location1.Location.X + 1, Location1.Location.Y)
Panel1.Width += 1

Loop
Else
t = 350
Do While Not t = i
i += 1
Location1.Width = i
Location1.Location = New Point(Location1.Location.X - 1, Location1.Location.Y)
Timer1.Stop()
Panel1.Width -= 1

Loop
End If


End Sub

:button1
m = 2

Timer1.Start()

:usercontrol location
Form1.m = 1
Form1.Timer1.Interval = 50
Form1.Timer1.Enabled = True
Form1.Timer1.Start()


یعنی با توجه به داشتن عرض فرم این دستور انجام میشه :

Else
t = 350
Do While Not t = i
i += 1
Location1.Width = i
Location1.Location = New Point(Location1.Location.X - 1, Location1.Location.Y)
Timer1.Stop()
Panel1.Width -= 1

Loop


سوال : حالا اگه بخوایم برای یک فرم تنها استفاده کنیم چطور میشه ؟ یعنی با کلیک روی یه فرم " فرم به سمت راست ، چپ ... مانیتور بره و محو بشه

Hybrid
چهارشنبه 16 فروردین 1391, 20:39 عصر
سوال : حالا اگه بخوایم برای یک فرم تنها استفاده کنیم چطور میشه ؟ یعنی با کلیک روی یه فرم " فرم به سمت راست ، چپ ... مانیتور بره و محو بشه

یک حالتش ( از چپ به راست) رو واست نوشتم ، بقیش به طریق مشابه انجام میشه و نکته ی خاصی نداره

aftabeshargh
چهارشنبه 16 فروردین 1391, 21:30 عصر
سلام
منظورم از محو شدن" استفاده از opacity نبود " منظورم این بود که وقتی فرم کاملا از سمت راست دسکتاپ گذشت بعدش بسته بشه " همین

شرط اینکه بفهمیم location فرم به انتهای سمت راست مانیتور - دسکتاپ رسیده چیه ؟ که بعدش فرم رو ببندیم ؟

Me.Left = Me.Left + 20

یعنی وقتی با دستور بالا فرم به انتهای دسکتاپ رسید با چه شرطی بگیم فرم بسته بشه ؟ لوکیشن سمت راست ترین نقطه مانیتور چنده ؟

xxnagin
چهارشنبه 16 فروردین 1391, 21:39 عصر
'چپ به راست
Me.Left += 10
 If Me.Left = Screen.PrimaryScreen().Bounds.Width Then
Timer1.Enabled = False
End
End If



'راست به چپ
Me.Left -= 10
If Me.Right < Screen.PrimaryScreen().Bounds.X Then
Timer1.Enabled = False
End
End If

aftabeshargh
چهارشنبه 16 فروردین 1391, 21:45 عصر
سلام
End چرا انجام نمیشه ؟ یعنی شرط بررسی نمیشه ؟

xxnagin
چهارشنبه 16 فروردین 1391, 21:49 عصر
چرا من دارم میزنم میشه

aftabeshargh
چهارشنبه 16 فروردین 1391, 21:57 عصر
برا بخش "چپ به راست" شرط اجرا نمیشه

xxnagin
چهارشنبه 16 فروردین 1391, 23:11 عصر
ببخشید به جا ی Width راست یا (right) بذار
که این میشه
و به جای مساوی <

Screen.PrimaryScreen().Bounds.right
کل کد


If Me.Left > Screen.PrimaryScreen().Bounds.Right Then
Timer1.Enabled = False
End
End If

aftabeshargh
چهارشنبه 16 فروردین 1391, 23:16 عصر
فرقی نکرد دوست عزیز

xxnagin
چهارشنبه 16 فروردین 1391, 23:24 عصر
کل کد
به جای مساوی < را بذار

Me.Left += 10
If Me.Left > Screen.PrimaryScreen().Bounds.Right Then
Timer1.Enabled = False
End
End If

aftabeshargh
چهارشنبه 16 فروردین 1391, 23:33 عصر
حالا شد " ممنونم