12
votes

Comment puis-je faire mon formulaire transparent, mais qu'est-ce que je ne dessine pas?

J'ai essayé de définir l'opacité de ma forme à 50%, puis de dessiner une corde dessus. Il semble que la chaîne que je dessine sur elle a également une opacité de 50%. Comment puis-je dessiner une chaîne non transparente, mais laissez le fond de formulaire montrer 50%?

serait également prêt à le faire dans WPF si cela est possible, mais j'aurais besoin d'instructions explicites ou d'un exemple de projet, car je ne l'ai jamais fait auparavant.

Pour clarifier, je souhaite que la forme d'arrière-plan soit un noir à 80% opaque à ce qui est en dessous, puis je veux dessiner du texte, etc. sur elle et l'avoir à 100% opaque.


0 commentaires

7 Réponses :


4
votes

2 commentaires

Ce n'est pas la même chose, ce que cela dit est que lorsque vous dessinez la couleur de la couleur de cette clé, elle affichera comme transparente, ce qui signifie 0% opaque (ou entièrement transparent selon que si vous êtes une tasse à moitié guy). Cela ne vous permet pas de la définir à 50% transparent.


D'ACCORD. Merci pour la mise à jour. Vous avez raison, bien sûr. Le TransparenceKey ne fonctionnera que si vous souhaitez le faire 100% transparent. (Je suis une tasse à moitié gars plein moi-même.)



0
votes

dans l'énumération de ControlStyles MSDN Il y a une valeur appelée soutientransparentbackcolor. Dans votre formulaire Contructor exécutez ceci:

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);


3 commentaires

HM, cela ressemble à ce que je veux, mais je reçois une boîte grise, et il semble que tout ce que je dessine sur le dessus s'il ne montre pas. J'ai essayé couleur.Transparent et cela.backcolor = color.fromargb (180, 0, 0, 0);


Je pense que cela ne fonctionnera pas, de MSDN: Si true, le contrôle accepte un backcolor avec un composant alpha inférieur à 255 pour simuler la transparence. La transparence ne sera simulée que si le bit UserPaint est défini sur true et que la commande parent est dérivée du contrôle. Je suppose que depuis la forme principale n'a aucun parent qu'il échoue au dernier test.


Ah, mes excuses. Je n'ai pas remarqué ça. Je soupçonne que votre théorie est correcte.



0
votes

Utilisez TransparenceKey pour rendre la fenêtre comme transparente. Créez un panneau vide avec la couleur de fond de votre et donnez-la l'opacité souhaitée.

Créez ensuite tous vos enfants dans un conteneur / panneau distinct (lui-même un frère au panneau translucide créé ci-dessus) et ne le rendez pas du tout.

Cela devrait vous donner l'effet d'un fond translucide mais des commandes visibles.


3 commentaires

Je viens d'essayer cela et je reçois un fond opaque à travers le conteneur transparent, et il se trouve être la couleur que je fixe la transparencekey à. Par exemple, j'ai défini le transparencekey sur le rose, puis je mettais un panneau de fond noir opaque à 80% et ce que je vois est un fond opaque rosé / noir.


Essayez les paramètres de l'arrière-plan transparence et formulaire sur transparent.


Cela remonte au même problème ci-dessous. Color.Transparent n'est supporté que si je peux définir "SupportRansparentBackColor" qui ne permet pas que le parent est un contrôle. Pour la forme principale, il n'y a pas de parent: SetStyle (Controlstyles.SupportStransparentBackColor, True); cela.Transparencekeykey = Color.Transparent; ceci.backcolor = couleur.Transparent;



19
votes

Ceci est très facile à faire dans WPF:

  1. Définir Windowstyle = "Aucun" sur la fenêtre (Remarque: Ceci est requis, vous ne pouvez pas avoir de transparence et de la norme Windows Chrome)
  2. SET PERMISTRANSPARENCE = "TRUE" sur la fenêtre
  3. Définissez un arrière-plan sur la fenêtre à l'aide d'une brosse avec transparence, telle que fond = "# affffff"

    Voici un échantillon rapide: xxx

    Maintenant, étant donné que vous avez désactivé la standard Windows Chrome, vous aurez besoin de Pour fournir votre propre bouton pour fermer / minimiser / optimiser / faire glisser la fenêtre. Vous pouvez le faire assez facilement vous-même ou vous pouvez rechercher en achetant quelque chose comme blendables qui vient avec un " Fenêtre chromable "Contrôle que vous pourriez utiliser.


0 commentaires

0
votes

Dans Winforms, MSDN dit ceci:

La propriété d'opacité vous permet de Spécifiez un niveau de transparence pour la forme et ses contrôles. Quand cela la propriété est définie sur une valeur inférieure à 100% (1,00), la forme entière, y compris les frontières, est faite plus transparent.

Ainsi, tout contrôle des enfants du formulaire que vous avez défini sur OPITY aura une opacité modifiée. Si vous souhaitez réaliser différents niveaux d'opacité sur des contrôles individuels, vous devrez passer à WPF.


0 commentaires

0
votes

Je suppose qu'il s'agit d'un projet Winforms, bien que vous ayez dit que vous seriez prêt à essayer WPF.

Le lemme passe à mon capuchon de pensée latéral: toute raison particulière que vous ne pouviez pas simplement faux it? Comme dans, faites un bitmap dans des éléments de Photoshop ou de la peinture de peinture pro ou d'une autre de telle sorte que vous définissez comme tout le fond de la WinForm, et que vous simplement dessine la zone partiellement transparente sur laquelle les commandes seront placées. Juste sur ce bitmap?


0 commentaires

1
votes

Une solution de contournement qui vous vient à l'esprit consiste à utiliser deux fenêtres superposées sur les autres. Rendez la fenêtre «Fond» à 50% d'opacité et le propriétaire attire votre texte sur une fenêtre superposée sur l'autre. Si vous faites des affichages de type LABA, cela pourrait être simple mais pourrait être compliqué rapidement si vous avez besoin d'une grande partie de l'utilisateur qui pourrait alors être filtrée à travers votre fenêtre "Main" "ou" Bottom ".

Je l'ai eu pour travailler, mais c'est un peu d'écureuil. La solution à deux fenêtres semblait promis jusqu'à ce que je découvre que .NET ou Win32 fait une chose étrange de parentalité automatique lorsque vous y réfléchissez même implicitement. Cela a probablement lieu avec la façon dont les messages sont pompés cependant. Le parent principal détient la pompe de message d'application et Int Guess est implicitement le parent ...

J'ai essayé un tas de solution de contournement, mais cette minuterie ci-dessous a fonctionné le meilleur. Dans tous les cas, cela pourrait être un indice de mieux ...


xxx


0 commentaires