Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在AppDomain中运行表单时会丢失视觉样式?_C#_.net_Winforms - Fatal编程技术网

C# 为什么在AppDomain中运行表单时会丢失视觉样式?

C# 为什么在AppDomain中运行表单时会丢失视觉样式?,c#,.net,winforms,C#,.net,Winforms,如果我加载两个表单,一个是通过应用程序以正常方式运行,另一个是通过AppDomain使用以下代码: static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); AppDomain dom = AppDomain.CreateDomain("

如果我加载两个表单,一个是通过
应用程序以正常方式运行,另一个是通过AppDomain使用以下代码:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());

    AppDomain dom = AppDomain.CreateDomain("bob", AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);
    dom.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);
    Test t = (Test)dom.CreateInstanceAndUnwrap(System.Reflection.Assembly.GetExecutingAssembly().FullName, typeof(Test).FullName);
    t.Run();
}
使用
测试中的以下代码:

public class Test : MarshalByRefObject
{
    public void Run()
    {
        Form2 f = new Form2();
        f.ShowDialog();
    }
}
当显示
Form2
时,我没有任何视觉样式。如果我调用
newtest().Run()从上面加载的
表单1
中的按钮单击事件中,正确显示样式

表单1
的按钮单击处理程序加载(不在应用程序域中):

通过AppDomain加载:

我在网上查看过,但找不到窗口中的视觉样式丢失的原因。正如您所看到的,它有一种方形的XP前的感觉


在通过AppDomain加载控件时,有人能建议如何保留视觉样式吗?请注意,这只是一个测试,今后将用于插件。

应用程序。EnableVisualStyles()
适用于AppDomain。如果您从另一个AppDomain打开表单时未在其中调用EnableVisualStyles,则这些表单将不会应用视觉样式。

您的代码不会重新处理此问题。发布更好的代码,提及您使用的Windows和.NET版本。否。底层操作系统调用是CreateActCtx(),用于创建激活上下文。它对AppDomains一无所知。谢谢!:)总是小事情!