winforms - Warum VB6.0-Formular als C#-Form angezeigt?




(2)

Ich habe eine COM-DLL, die eine Form hat. Diese DLL wird von einer C # -Anwendung verbraucht. Ich habe Visual Styles für meine C # -Anwendung aktiviert. Ich möchte nicht, dass die Visual Styles für das COM-DLL-Formular angewendet werden. Aber wenn ich das Formular meiner Anwendung und des LANUCH COM DLLs ausführe, werden visuelle Stile darauf angewendet. Wie werde ich das verhindern?

Viele Leute schlagen vor, ein Manifest zu verwenden. Aber, was manifestiert, die ich im Internet sehe, benutzen sie alle allgemeine Kontrollen 6. Wie man ein manifest herstellt, das allgemeine Kontrollen 5.0 verwendet? Einige schlagen auch vor, ActivationContext zu verwenden. Aber das braucht auch korrekte Manifest, die gemeinsame Kontrollen 5.0 richtig nutzt?

Bitte schlagen Sie etwas vor.


Answers

Wenn Sie ein Fensterhandle für das Formular (aus der COM-DLL) haben, können Sie visuelle Stile in diesem Formular mithilfe der Win32-API deaktivieren:

SetWindowTheme( hwnd, "", "" );

Ich glaube, du musst P / Invoke die API. Hier ist die Definition:

[DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]
public static extern int SetWindowTheme(
   IntPtr hWnd,
   String pszSubAppName,
   String pszSubIdList);

Ich benutze das:

public static class DateTimeExtensions
{
    public static int Age(this DateTime birthDate)
    {
        return Age(birthDate, DateTime.Now);
    }

    public static int Age(this DateTime birthDate, DateTime offsetDate)
    {
        int result=0;
        result = offsetDate.Year - birthDate.Year;

        if (offsetDate.DayOfYear < birthDate.DayOfYear)
        {
              result--;
        }

        return result;
    }
}




c# winforms vb6