Je me demande s'il est possible de lier (visuellement et fonctionnellement) deux commandes (composants)? (.NET2)Lier deux contrôles en un
Simplifiant les choses, j'ai deux étiquettes - l'une est l'étiquette principale (elle peut être déplacée avec la souris) et un autre - l'étiquette de description - elle doit suivre l'étiquette principale sur un distance spécifiée.
En outre, l'étiquette de description doit être en mesure de répondre aux événements, comme la souris, etc. cliquez Peut-être il y a une possibilité d'utiliser un UserControl mais entre les étiquettes je dois être un espace « transparent ».
Merci.
== == 1 EDIT
Je pourrais aussi, au lieu de créer la deuxième commande d'étiquettes, il suffit d'utiliser une info-bulle éternelle . Dans ce cas, je m'interroge sur la possibilité de l'afficher à l'infini et aussi la possibilité de détecter le clic sur l'info-bulle.
Quoi qu'il en soit, si je clique sur l'étiquette ou l'info-bulle, je devrai afficher à l'utilisateur une zone de texte contrôle (au lieu de l'info-bulle ou l'étiquette), afin qu'il soit en mesure de modifier la description affichée (en la durée d'affichage fait)
== == EDIT 2
alt text http://lh4.ggpht.com/_1TPOP7DzY1E/Sy9Mk8-Z-xI/AAAAAAAACzo/-5huzSd59j4/s800/UserControl.png
ceci est mon "transperent" design UserControl
et ceci est ma forme en mode de fonctionnement (contrôle d'utilisateur "transparent" région couvrant un bouton).
c'est le code du UserControl:
using System;
using System.Windows.Forms;
using System.Drawing;
namespace WindowsControlLibrary1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;//WS_EX_TRANSPARENT
return cp;
}
}
private int opacity;
public int Opacity
{
get { return opacity; }
set
{
opacity = value;
this.InvalidateEx();
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
Color bk = Color.FromArgb(Opacity, this.BackColor);
e.Graphics.FillRectangle(new SolidBrush(bk), e.ClipRectangle);
}
protected void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = this.Location + (Size)e.Location;
}
}
Point cursorDownPoint = Point.Empty;
private void label1_MouseDown(object sender, MouseEventArgs e)
{
cursorDownPoint = label1.PointToScreen(e.Location);
}
}
}
=================
* La description était un peu simplifiée. Dans mon cas réel, j'ai un composant point circulaire personnalisé (: de Microsoft.VisualBasic.PowerPacks.OvalShape). Le point représente un objet dans la position temporelle - dans l'étiquette liée, j'ai besoin de spécifier l'heure du point. L'utilisateur pourra modifier l'heure du point en cliquant sur l'étiquette horaire.
Réponse à l'édition 2: Réglez-vous l'opacité sur zéro? –
@Josh: Oui ... c'est 0 par défaut. Je l'ai mis aussi à 5, mais cela n'a pas changé mais la nuance de couleur de fond. – serhio