gpt4 book ai didi

c# - 如何在 VS 2005 中为委托(delegate)回调实现自动属性

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:19 30 4
gpt4 key购买 nike

我正试图让我在这里找到的 TwainDotNet 解决方案 ( C# TWAIN interaction ) 进行编译,但我已经束手无策了。

这个解决方案显然是在 VS 2008 中开发的,而我在 2005 年工作(目前没有选择)。在 2005 年,我可能花了很多时间来编译这一切,并且我将我的错误减少到两个,这两个错误都是同一个问题。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace TwainDotNet.WinFroms
{
/// <summary>
/// A windows message hook for WinForms applications.
/// </summary>
public class WinFormsWindowMessageHook : IWindowsMessageHook, IMessageFilter
{
IntPtr _windowHandle;
bool _usingFilter;

public WinFormsWindowMessageHook(Form window)
{
_windowHandle = window.Handle;
}

public bool PreFilterMessage(ref Message m)
{
if (FilterMessageCallback != null)
{
bool handled = false;
FilterMessageCallback(m.HWnd, m.Msg, m.WParam, m.LParam, ref handled);
return handled;
}

return false;
}

public IntPtr WindowHandle { get { return _windowHandle; } }

public bool UseFilter
{
get
{
return _usingFilter;
}

set
{
if (!_usingFilter && value == true)
{
Application.AddMessageFilter(this);
_usingFilter = true;
}

if (_usingFilter && value == false)
{
Application.RemoveMessageFilter(this);
_usingFilter = false;
}
}
}

public FilterMessage FilterMessageCallback
{
get;
set;
}
}

}

访问委托(delegate)实例的属性编译失败。

错误:'TwainDotNet.WinFroms.WinFormsWindowMessageHook.FilterMessageCallback.get' 必须声明一个正文,因为它没有标记为抽象或外部

下面是这个类实现的接口(interface)IWindowsMessageHook:

using System;
using System.Collections.Generic;
using System.Text;

namespace TwainDotNet
{
public interface IWindowsMessageHook
{
/// <summary>
/// Gets or sets if the message filter is in use.
/// </summary>
bool UseFilter { get; set; }

/// <summary>
/// The delegate to call back when the filter is in place and a message arrives.
/// </summary>
FilterMessage FilterMessageCallback { get; set; }

/// <summary>
/// The handle to the window that is performing the scanning.
/// </summary>
IntPtr WindowHandle { get; }
}

public delegate IntPtr FilterMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled);
}

我承认我是一个委托(delegate)新手,我在这里不知所措。如何在 VS 2005 中复制此功能?

感谢抽空。

最佳答案

只需使用支持字段:

private FilterMessage m_FilterMessageCallback;
public FilterMessage FilterMessageCallback
{
get { return m_FilterMessageCallback; }
set { m_FilterMessageCallback = value; }
}

界面中的代码

FilterMessage FilterMessageCallback { get; set; }

顺便说一句。与 C#2.0/3.0 无关,这是一个带有 setter 和 getter 的普通接口(interface)定义。

关于c# - 如何在 VS 2005 中为委托(delegate)回调实现自动属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834469/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com