我需要做一个程序,用Winforms在笛卡尔平面上画一条线。我的数据输入方法是在标记为X和Y的TextBox控件中输入坐标,但我的问题一般是关于在图表上表示点并连接它们来画一条线。
TextBox
的数据
ee7vknir1#
使用System.Windows.Forms.DataVisualization.Charting是实现这一点的一种方法,我使用过它的产品代码,发现它功能丰富且健壮。对于**.Net Core**,请将System.Windows.Forms.DataVisualization安装为NuGet预发布版本(与System.Data.SqlClient沿着作为依赖项)* 或 * 移植它的第三方衍生产品之一。* 在搜索NuGets时,确保选中了**[x] Include Prerelease框。* 我使用.Net Core 3和. Net Core 4测试了这个答案(clone)和.Net Core 6(clone)。如果您仍在使用.NET Framework**,则它已经内置,不需要外部包。(我已经 * 经常 * 使用该版本。)我已经整理了一个图表的基本示例,该示例在每次单击鼠标时在十字线处添加一个点,双击鼠标时清除所有点。要回答您提出的问题,即如何使用文本框绘制线条,只需查看将点添加到系列中的代码,并使用文本框中的值执行相同的操作。x1c 0d1x的数据
System.Windows.Forms.DataVisualization.Charting
System.Windows.Forms.DataVisualization
System.Data.SqlClient
主表单CTOR
Panel已放置在MainForm上,以包含在MainForm CTor中设置的Chart。Crossing属性设置为0,以便X-Y居中。IsMarksNextToAxis属性设置为false以将标签放在两侧和底部。将这些属性设置为true将使其看起来更像您的邮报
Panel
MainForm
Chart
Crossing
IsMarksNextToAxis
false
true
public MainForm() { InitializeComponent(); _chart = new Chart{ Dock = DockStyle.Fill, }; _series = new Series { Name = "Series1", Color = Color.Green, IsVisibleInLegend = false, IsXValueIndexed = false, ChartType = SeriesChartType.Line, BorderWidth = 2, // In a line chart, this is the width of the line. }; _series.Points.Add(new DataPoint { IsEmpty = true }); _chartArea = new ChartArea { AxisX = { Minimum = -10, Maximum = 10, Interval = 1, IsMarksNextToAxis = false, IsLabelAutoFit = false, Crossing = 0, LineWidth = 1, MajorGrid = { Interval = 1, LineColor = Color.LightBlue, LineWidth = 1 }, Enabled = AxisEnabled.True, }, AxisY = { Minimum = -10, Maximum = 10, Interval = 1, IsMarksNextToAxis = false, IsLabelAutoFit = false, Crossing = 0, LineWidth = 1, MajorGrid = { Interval = 1, LineColor = Color.LightBlue, LineWidth = 1 }, Enabled = AxisEnabled.True, }, }; _chart.ChartAreas.Add(_chartArea); _series.MarkerStyle = MarkerStyle.Cross; _chart.Series.Add(_series); _chartArea.CursorX.LineColor = Color.LightCoral; _chartArea.CursorX.Interval = 0.01; _chartArea.CursorX.IsUserEnabled = true; _chartArea.CursorY.LineColor = Color.LightCoral; _chartArea.CursorY.Interval = 0.01; _chartArea.CursorY.IsUserEnabled = true; panel.Controls.Add(_chart); #if false // Draw diagonal for (int i = -10; i <= 10; i++) { _series.Points.AddXY(i, i); } #endif _chart.MouseClick += onChartClick; _chart.MouseDoubleClick += onChartDoubleClick; _chart.MouseMove += onChartMouseMove; }
字符串
事件
使用光标位置将新点添加到系列中。
private void onChartClick(object sender, MouseEventArgs e) { _series.Points.AddXY(_chartArea.CursorX.Position, _chartArea.CursorY.Position); }
型按两下即可清除数列。
private void onChartDoubleClick(object sender, MouseEventArgs e) { _series.Points.Clear(); _series.Points.Add(new DataPoint { IsEmpty = true }); }
型移动十字光标:
private void onChartMouseMove(object sender, MouseEventArgs e) { _chartArea.CursorX.SetCursorPixelPosition(e.Location, true); _chartArea.CursorY.SetCursorPixelPosition(e.Location, true); }
型
核武器
的
1条答案
按热度按时间ee7vknir1#
使用
System.Windows.Forms.DataVisualization.Charting
是实现这一点的一种方法,我使用过它的产品代码,发现它功能丰富且健壮。对于**.Net Core**,请将
System.Windows.Forms.DataVisualization
安装为NuGet预发布版本(与System.Data.SqlClient
沿着作为依赖项)* 或 * 移植它的第三方衍生产品之一。* 在搜索NuGets时,确保选中了**[x] Include Prerelease框。* 我使用.Net Core 3和. Net Core 4测试了这个答案(clone)和.Net Core 6(clone)。如果您仍在使用.NET Framework**,则它已经内置,不需要外部包。(我已经 * 经常 * 使用该版本。)我已经整理了一个图表的基本示例,该示例在每次单击鼠标时在十字线处添加一个点,双击鼠标时清除所有点。要回答您提出的问题,即如何使用文本框绘制线条,只需查看将点添加到系列中的代码,并使用文本框中的值执行相同的操作。
x1c 0d1x的数据
主表单CTOR
Panel
已放置在MainForm
上,以包含在MainForm
CTor中设置的Chart
。Crossing
属性设置为0,以便X-Y居中。IsMarksNextToAxis
属性设置为false
以将标签放在两侧和底部。将这些属性设置为true
将使其看起来更像您的邮报字符串
事件
使用光标位置将新点添加到系列中。
型
按两下即可清除数列。
型
移动十字光标:
型
核武器
的