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 عصر
نمیدونم والا ، ولی تو کامپیوتر من روون کار میکنه :لبخندساده:
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.