如何将一个变量从Windows窗体项目传递给一个DLL项目?

时间:2014-09-12 20:37:35

标签: c# .net winforms

在一个解决方案中我有两个项目,一个是dll项目,第二个是windows窗体。 在form1的windows窗体项目中,我可以调用dll项目中的方法,例如:

在form1顶部:

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;

然后在form1中的按钮点击事件中我做了:

void gkh_KeyDown(object sender, KeyEventArgs e)
        {
            overlayengine.DrawEnabled = true;
        }

我使用了一个断点,它正在进行并且正在进行overlayengine.DrawEnabled = true;但是当我按下键时,我看不到任何地方的图纸。

出了什么问题?

3 个答案:

答案 0 :(得分:0)

您只需在Click事件处理程序中调用Draw方法

即可
private void button1_Click(object sender, System.EventArgs e)
{
  overlayengine.Draw();
}

希望这能帮到你。

答案 1 :(得分:0)

我不确定你的要求,但是因为听起来你从winforms项目引用了你的DLL,所以你有两个项目的来源。

为什么不直接为接受bool的draw方法添加重载?然后从重载调用原始方法。

既然你在winform中做出bool决定然后调用draw方法,为什么不做决定调用或不从表单调用draw方法?

或者我完全忽略了这个问题的重点?

答案 2 :(得分:0)

不是将布尔标志添加到Form1,而是将其添加到DxOverlayEngine并检查库Draw()实现中的本地布尔标志,以便在设置为{{1时绕过必要的行}}

然后除了绘制之外,还向库中添加访问器方法,例如

false

在C#中,您可以使用公共属性来完成同样的事情。

void SetDrawEnabled(bool enable)
bool GetDrawEnabled();

单击Form1上的按钮时,适当更改DrawEnabled状态。在SetDrawEnabled中,在适当的状态转换(无效)中调用Draw()。

实现此目的的一种方法是每次设置DrawEnabled的值时直接调用Draw()。

public bool DrawEnabled { get; set; }