gpt4 book ai didi

c# - 如何从表单控件向 statusStrip 提供值?

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:04 25 4
gpt4 key购买 nike

这是我的控件的上下文:

/*
Form
StatusStrip
ToolStripStatusLabel

TableLayoutPanel
MyGenioView
*/

因此,MyGenioView 正在拦截 MouseMove 事件处理程序。已经存在的代码用于橡皮筋矩形。所以我有:

public void MyMouseMove(Object sender, MouseEventArgs e)
{
Point ptCurrent = new Point(e.X, e.Y);
// If we "have the mouse", then we draw our lines.
if (m_bHaveMouse)
{
// If we have drawn previously, draw again in
// that spot to remove the lines.
if (m_ptLast.X != -1)
{
MyDrawReversibleRectangle(m_ptOriginal, m_ptLast);
}
// Update last point.
m_ptLast = ptCurrent;
// Draw new lines.
MyDrawReversibleRectangle(m_ptOriginal, ptCurrent);
}

// New code here
}

我无法理解的是我想从 MyGenioView MouseMove 处理程序设置 statusStrip1.statusLabel 的值。我不知道该怎么做。

我要使用的代码是:

OdGePoint3d pt = GetWorldCoordinates(ptCurrent);
String strCoordinate = String.Format("{0},{1}", ptCurrent.X, ptCurrent.Y);

但是将它提供给主要表单 statusStrip 对象的正确方法是什么?

感谢您的帮助。

更新:

知道如何设置 statusStrip 标签对象的文本。那不是我的问题。我的问题与我的鼠标处理程序事件的上下文及其与表单的关系有关。请参阅问题开头所述的控件上下文。到目前为止的评论没有考虑到这一点。

这是我在 form 中创建 MyGenioView 对象(接收鼠标处理程序)的当前位置:

private void viewToolStripMenuItem_Click(object sender, EventArgs e)
{
OdDbDatabase TDDatabase = m_oGenioView.GetDatabase();

if (m_oGenioViewCtrl != null)
m_oGenioViewCtrl.DeleteContext();

tableLayoutPanel.RowCount = 1;
tableLayoutPanel.ColumnCount = 1;
m_oGenioViewCtrl = new MyGenioView();
m_oGenioViewCtrl.TDDatabase = TDDatabase;
m_oGenioViewCtrl.ResetDevice(true);
m_oGenioViewCtrl.Dock = DockStyle.Fill;
m_oGenioViewCtrl.Margin = new Padding(1);
tableLayoutPanel.Controls.Add(m_oGenioViewCtrl);
}

最佳答案

您有多个选项来更新状态:

  1. 注入(inject) Action<Point>在用户控件中
  2. 创建 StatusUpdate用户控件中的事件
  3. 您还可以使用控件层次结构访问控件,例如在用户控件中 this.ParentForm是您的父表单,您可以使用 Controls 找到目标控件收集或以形式公开。

前两个选项要好得多,因为将您的控件与表单分离,并且您的用户控件可以通过这种方式用于许多表单和其他容器。提供一种更新状态的方法取决于容器。

最好的选择是创建和使用事件。

1- 注入(inject) Action<Point>在用户控件中

注入(inject) Action<Point>在用户控件中并在 MouseMove 中使用它.为此,将其放在用户控件中:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Action<Point> StatusUpdate{ get; set; }

//Don't forget to assign the method to MouseMove event in your user control
private void UserControl1_MouseMove(object sender, MouseEventArgs e)
{
if (StatusUpdate!= null)
StatusUpdate(e.Location);
}

并将此代码放在表单上:

private void Form1_Load(object sender, EventArgs e)
{
this.userControl11.StatusUpdate= p => this.toolStripStatusLabel1.Text=p.ToString();
}

2- 创建 StatusUpdate用户控件中的事件

创建一个 StatusUpdate用户控件中的事件并在 MouseMove 中引发它并使用表单中的事件。您也可以使用 MouseMove事件本身。

为此,将此代码置于用户控件中:

public event EventHandler<MouseEventArgs> StatusUpdate;
public void OnStatusUpdate(MouseEventArgs e)
{
var handler = StatusUpdate;
if (handler != null)
handler(this, e);
}

//Don't forget to assign the method to MouseMove event in your user control
private void UserControl1_MouseMove(object sender, MouseEventArgs e)
{
OnStatusUpdate(e);
}

然后放入表格,放入这段代码:

//Don't forget to assign the method to StatusUpdate event in form  
void userControl11_StatusUpdate(object sender, MouseEventArgs e)
{
this.toolStripStatusLabel1.Text = e.Location.ToString();
}

关于c# - 如何从表单控件向 statusStrip 提供值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483278/

25 4 0
文章推荐: c# - 如何在 C# 中对 XmlDocument 中的元素的子元素进行排序?
文章推荐: html - 在屏幕的水平和垂直中心放置一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com