如何将变量从windows窗体项目传递到dll项目
本文关键字:项目 dll 窗体 windows 变量 | 更新日期: 2023-09-27 18:21:39
在一个解决方案中,我有两个项目,一个是dll项目,第二个是windows窗体。在form1中的windows窗体项目中,我可以调用dll项目中的方法,例如:
在表格1顶部:
Capture.Hook.DX11.DXOverlayEngine overlayengine;
在构造函数中:
overlayengine = new Capture.Hook.DX11.DXOverlayEngine();
然后在构造函数中,我可以制作:
overlayengine.Draw();
在Draw()方法中的项目dll中,有两条线可以绘制:
_spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y, textElement.Text, textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
_spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y + 25,
DateTime.Now.ToString("h:mm tt"),textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
这就是我现在所做的:
在dll项目(库类型项目)中,我在顶部添加了:
public bool DrawEnabled { get; set; }
然后在Draw()方法中我做了:
if (DrawEnabled == true)
{
_spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y, textElement.Text, textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
_spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y + 25,
DateTime.Now.ToString("h:mm tt"), textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
}
然后在form1中,我在顶部做了:
Capture.Hook.DX11.DXOverlayEngine overlayengine;
然后在form1构造函数中:
overlayengine = new Capture.Hook.DX11.DXOverlayEngine();
overlayengine.DrawEnabled = false;
然后在表格1中的按钮点击事件中,我做了:
void gkh_KeyDown(object sender, KeyEventArgs e)
{
overlayengine.DrawEnabled = true;
}
我使用了一个断点,它正在获取和执行overlayengine。DrawEnabled=true;但当我按键时,我看不到任何地方的图纸。
怎么了?
与其将布尔标志添加到Form1
,不如将其添加到DxOverlayEngine
,并在库的Draw()
实现中检查本地布尔标志,以在设置为false
时绕过必要的行。
然后除了绘制之外,还向库中添加访问器方法,例如
void SetDrawEnabled(bool enable)
bool GetDrawEnabled();
在C#中,您可以使用公共属性来完成同样的事情。
public bool DrawEnabled { get; set; }
单击Form1上的按钮时,请适当更改DrawEnabled状态。在SetDrawEnabled中,在适当的状态转换(无效)时调用Draw()。
实现这一点的一种方法是每次设置DrawEnabled的值时直接调用Draw()。
private bool _drawEnabled = false;
public bool DrawEnabled
{
get { return _drawEnabled; }
set { _drawEnabled=value; Draw(); }
}
您可以在点击事件处理程序中调用Draw方法
private void button1_Click(object sender, System.EventArgs e)
{
overlayengine.Draw();
}
希望这对你有帮助。
我不确定你的要求是什么,但因为听起来你引用了winforms项目中的DLL,所以你有两个项目的源代码。
为什么不为接受bool的draw方法添加一个重载呢?然后从重载中调用原始方法。
既然你在winform中做出了bool决定,然后调用了draw方法,为什么不直接决定从表单中调用或不调用draw方法呢?
还是我完全没有抓住这个问题的要点?