PDA

View Full Version : خطوط عمودی و افقی متقاطع در محل قرار گرفتن Mouse



reza6384
چهارشنبه 19 اسفند 1388, 21:32 عصر
با سلام.
چجوری میشه با یک دکمه استایل موس رو جوری کرد که یک خط افقی و یک خط عمودی متقاطع و عمود بر هم از اون رد بشه؟ مثل بعضی از نرم افزار ها که این امکان رو دارند. من در واقع یک خط کش میخوام برای اینکه کاربر بتونه نمودارهای روی یک فرم رو در یک نقطه مشخص x باهم مقایسه کنه.

با تشکر

sari-1369
پنج شنبه 20 اسفند 1388, 00:54 صبح
این قطعه کد با استفاده از توابع گرافیگی دات نت این کار رو انجام میده :

Imports System.Drawing

Public Class Form1

Dim TF As Boolean = False
Dim g As Graphics

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TF = Not TF
g.Clear(Me.Panel1.BackColor)
End Sub

Public Sub New()
InitializeComponent()
g = Panel1.CreateGraphics
End Sub

Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
Me.Text = e.X
If TF Then
g.Clear(Me.Panel1.BackColor)
g.DrawLine(Pens.Red, 0, e.Y, Panel1.Width, e.Y)
g.DrawLine(Pens.Red, e.X, 0, e.X, Panel1.Height)
End If
End Sub

End Class

reza6384
پنج شنبه 20 اسفند 1388, 11:33 صبح
داداش دمت گرم ، یک بخش حل شد ، اما من می خوام این خط ها از روی کنترل ها هم عبور کنه ، کنترل های من کامپوننتهای رسم نمودار هستند ، ولی مثلا شما یک DataGridView اگر روی فرم بذاری میبینی که خطوط روی اون دیگه رسم نمیشن.
اگه اینم حل کنی خیلی ممنون میشم.

sari-1369
پنج شنبه 20 اسفند 1388, 13:13 عصر
از یه روش دیگه استفاده کردم ، خودم اولش شک داشتم که بشه ، ولی شد :لبخند:

Public Class Form1
Dim LBL1, LBL2 As New Label
Dim TF As Boolean = False

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TF = Not TF
LBL1.Visible = TF
LBL2.Visible = TF
End Sub

Public Sub New()
InitializeComponent()
LBL2.Width = 5
LBL2.Height = dgv.Height
LBL1.Width = dgv.Width
LBL1.Height = 5
LBL1.BackColor = Color.Red
LBL2.BackColor = Color.Red
LBL1.Visible = False
LBL2.Visible = False
Me.dgv.Controls.Add(LBL1)
Me.dgv.Controls.Add(LBL2)
End Sub

Private Sub dgv_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv.MouseMove
Me.Text = e.X
If TF Then
LBL1.Location = New Point(0, e.Y)
LBL2.Location = New Point(e.X, 0)
End If
End Sub
End Class

reza6384
پنج شنبه 20 اسفند 1388, 14:42 عصر
ایده قشنگی بود ، ذهن خلاقی داری ، دمت گرم ، با این که الان دارم این کد رو برای خودم Customize می کنم اما اومدم اول یکبار دیگه از شما تشکر کنم ، واقعاً ممنون که وقت گذاشتی و این کدها رو برای من نوشتی.

sari-1369
پنج شنبه 20 اسفند 1388, 15:46 عصر
خواهش ، حالا ما در مورد Pocket PC یه چند تا سوال دارم :لبخند: ازت میپرسم بی حساب میشیم :لبخند: (شوخی)

reza6384
یک شنبه 23 اسفند 1388, 17:11 عصر
سلام.

فقط یه مشکل کوچیک دیگه که البته قابل تحمله و میشه دست بهش نزد.
اینکه موقع حرکت این خط ها چشمک میزنن و به قولی پرپر میزنن یا هی Refresh میشن و شمای خوبی نداره.
اونو باید چیکار کرد.

sari-1369
یک شنبه 23 اسفند 1388, 17:18 عصر
نمیدونم والا ، ولی تو کامپیوتر من روون کار میکنه :لبخندساده: