小编Joh*_*aps的帖子

通过远程桌面查看时,表单最大化

我为某种机器编写了一个HMI(人机界面)程序.该程序在带有"Windows Standard Embedded 7"的触摸面板上运行.我想我的问题是它是Windows 7的嵌入式版本没有任何区别.

  • WindowState我的程序的主要形式被设置为Normal,且尺寸设置为匹配触摸面板(1280×800)的分辨率.
  • FormBorderStyle设置为None.
  • StartPosition设置为CenterScreen.

问题是:

  • 当直接在触摸屏上启动程序时,程序将按原样显示,从顶部/左侧到右侧/底部完全填满屏幕.还行吧!

  • 当程序没有运行并且您通过远程桌面登录触摸面板(使用更大的屏幕,比方说1920x1200),然后然后启动程序(通过rdp会话)程序也按预期启动,如中间所示屏幕尺寸为1280x800.还行吧!

  • 当通过rdp登录时程序已经运行程序显示为最大化,填满整个屏幕(1920x1200).这不好,因为我的程序的整个布局是为1280x800制作的!

有没有人知道为什么我的程序表现得像这样,或者问题与rdp会话有什么关系?

c# remote-desktop winforms

7
推荐指数
1
解决办法
1042
查看次数

SystemEvents.TimeChanged未触发(已更新!)

我想要的是

每当Windows中的时区更改时,我都想做些事情。

到目前为止我有什么

为此,我实现了事件SystemEvents.TimeChanged,如下所示:

在构造函数中:

SystemEvents.TimeChanged += SystemEvents_TimeChanged;
Run Code Online (Sandbox Code Playgroud)

事件主体:

void SystemEvents_TimeChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Test1");}
Run Code Online (Sandbox Code Playgroud)

问题是什么

在Windows中更改时间或时区时,不会触发该事件。

我尝试过的

当我在干净的WinForms应用程序中编写以上代码时,一切都按预期工作。但是在我的应用程序中却没有,原因是包含许多其他代码。我看不到我还有其他任何事件,应该阻止上述事件的触发。

我的问题是

有谁知道什么可能导致上述代码无法在我的应用程序中触发,但是在创建仅包含上述代码的新项目/应用程序时按预期工作?

更新1

这是因为我在调用之前在单独的线程中显示了启动屏幕

Application.Run(new FormMain());
Run Code Online (Sandbox Code Playgroud)

然后,SystemEvents会坚持启动屏幕创建的线程,即使在加载应用程序后该线程也会终止。

现在的问题是,是否有一种方法可以告诉SystemEvents,当应用程序加载后,现在应该使用“正确的” UI线程吗?

c# events winforms

7
推荐指数
1
解决办法
229
查看次数

为什么不使用 DPAPI 来加密所有设置而不是仅加密主密码?

在我的应用程序中,我需要加密各种设置和密码。\n到目前为止,我一直在使用 RijndaelManaged 类等执行此操作,如下所示:

\n\n
/// <summary>\n/// Encrypts the string defined by parameter "data" and returns the encrypted data as string\n/// </summary>\n/// <param name="data">Data to be encrypted</param>\n/// <returns>The encrypted data</returns>\npublic static string Encrypt(string data)\n        {\n            if (data == "")\n                return "";\n\n            byte[] bytes = Encoding.ASCII.GetBytes(initVector);\n            byte[] rgbSalt = Encoding.ASCII.GetBytes(saltValue);\n            byte[] buffer = Encoding.UTF8.GetBytes(data);\n            byte[] rgbKey = new PasswordDeriveBytes(passPhrase, rgbSalt, hashAlgorithm, passwordIterations).GetBytes(keySize / 8);\n            RijndaelManaged managed = new RijndaelManaged();\n            managed.Mode = CipherMode.CBC;\n            ICryptoTransform transform = managed.CreateEncryptor(rgbKey, bytes);\n            MemoryStream memStream = new MemoryStream();\n …
Run Code Online (Sandbox Code Playgroud)

c# encryption dpapi

5
推荐指数
1
解决办法
1628
查看次数

如果用户未选择“任务”,则将密钥写入注册表

任务定义为:

Name: "TaskAutoLogon"; Description: "{cm:TaskAutoLogon}"; Flags: unchecked
Run Code Online (Sandbox Code Playgroud)

用户可以选择是否向注册表编写密钥,如下所示:

Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon; ValueType: dword; ValueName: AutoAdminLogon; ValueData: 1; Tasks: TaskAutoLogon
Run Code Online (Sandbox Code Playgroud)

我的问题是: 仅当未选中/未选中任务时,如何告诉Inno Setup将注册表项写入注册表?我实际上想反转任务的含义。

我知道可以使用[code]部分中的某些代码来完成此操作,但我希望有一种更本地化的方法。

提前致谢!

inno-setup

4
推荐指数
1
解决办法
469
查看次数

使用扩展方法复制数组

我有以下代码:

DateTime[] localTimeArray = GetTimeData<DateTime>();
Run Code Online (Sandbox Code Playgroud)

现在的问题是,.ToLocalTime()在将GetTimeData它们复制到新数组之前,我需要调用返回的数组中的每个元素.

如何在不必手动迭代每个项目的情况下进行此操作?

显然以下不起作用:

DateTime[] localTimeArray = GetTimeData<DateTime>().ToLocalTime();
Run Code Online (Sandbox Code Playgroud)

GetTimeData外部库一样,我无法按照注释中的建议在其中添加代码.

c# arrays

4
推荐指数
1
解决办法
43
查看次数

访问Radiogroup按钮会引发异常

这是我为重现该问题而做的测试应用程序:

在此输入图像描述

请查看以下测试代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(radioGroup1.Items[0]);
  ShowMessage(BoolToStr(radioGroup1.Buttons[0].Enabled));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage(radioGroup1.Items[0]);
  ShowMessage(BoolToStr(radioGroup1.Buttons[0].Enabled)); //<- Fails!!!
end;
Run Code Online (Sandbox Code Playgroud)

将显示FormCreate中的第一个ShowMessage,并显示正确的文本(Item1).

FormCreate中的第二个代码行抛出一个异常,该索引超出范围.

如果我在按钮单击事件中运行相同的代码,如代码中所示(在表单加载后)一切正常.

问题1: 在FormCreate中执行第二个代码行时,似乎没有加载按钮.为什么会出现这样的情况,当项目本身似乎已经加载?

问题2: 在将现有(运行良好)项目从Delphi 2006升级到XE6时,我注意到了这个问题.由于此问题,此项目现在在不同的单元中引发了几个异常.在这方面发生了什么变化?

提前感谢您的帮助!

delphi delphi-xe

1
推荐指数
1
解决办法
732
查看次数