我很想知道IComponent,IContainer和ISite的用途.我已经阅读了文档,但它非常模糊(或者我认为它太难了).我知道如果我创建一个类作为组件,它可以在Visual Studio设计器中使用.但我真的想更全面地了解:组件/容器模式实现了什么,它能让我的生活变得更轻松吗?
在需要一些严肃的重新分解的桌面应用程序中,我有几个代码块,如下所示:
private void LoadSettings()
{
WindowState = Properties.Settings.Default.WindowState;
Location = Properties.Settings.Default.WindowLocation;
...
}
private void SaveSettings()
{
Properties.Settings.Default.WindowState = WindowState;
Properties.Settings.Default.WindowLocation = Location;
...
}
Run Code Online (Sandbox Code Playgroud)
取代它的最佳方法是什么?项目施加的限制:
更新
对于后人,我还发现了两个有用的教程:"C#中的Windows窗体用户设置"和"探索持久应用程序设置的秘密".
我问了一下使用这种技术的结合形式的大小后续问题在这里.我将它们分开以帮助那些寻找类似问题的人.
我正在开展一个名为UAWKS(非官方Apple无线键盘支持)的项目,帮助Windows用户使用Apple的蓝牙键盘.UAWKS的主要目标之一是交换Cmd密钥(其行为与WinkeyWindows一样)Ctrl,允许用户执行Cmd+ C复制,Cmd+ T选择新选项卡等.
它目前使用AutoHotkey开发,在Windows XP下运行良好.但是,在Vista和Windows 7上,Cmd+ L会导致问题:
似乎Win+ L是一个特殊的和弦,其他一切混乱.
我查看了AHK源代码,他们尝试SendKey()在keyboard_mouse.cpp中解决这个问题(在v1.0.48.05的第883行附近),但它不起作用.我在C#中编写了自己的低级键盘钩子应用程序,我也看到了同样的问题.
有没有其他人遇到这个?有解决方法吗?
正如Tundey在回答我的上一个问题时指出的那样,你几乎可以毫不费力地将关于Windows窗体控件的所有内容绑定到ApplicationSettings.那么表单大小真的没办法做到这一点吗?本教程表示您需要显式处理Size,以便在窗口最大化或最小化时保存RestoreBounds而不是size.但是,我希望我可以使用以下属性:
public Size RestoreSize
{
get
{
if (this.WindowState == FormWindowState.Normal)
{
return this.Size;
}
else
{
return this.RestoreBounds.Size;
}
}
set
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
但我看不到在设计器中绑定它的方法(在PropertyBinding列表中明显缺少Size).