1

2つのコントロール(コンポーネント)を(視覚的および機能的に)リンクする可能性があるのでしょうか?(.NET2)

簡単に言うと、2つのラベルがあります。1つはメインラベル(マウスで移動できます)で、もう1つは説明ラベルです。指定した距離でメインラベルをたどる必要があります。

また、説明ラベルは、マウスクリックなどのイベントに応答できる必要があります。UserControlを使用する可能性はありますが、ラベルの間に「透明な」スペースが必要です。

ありがとう。

==編集1==

また、2番目のラベルコントロールを作成する代わりに、永遠のツールチップを使用することもできます。この場合、無限時間で表示される可能性と、ツールチップのクリックを検出する可能性について疑問に思います。

とにかく、ラベルまたはツールチップをクリックすると、表示された説明(実際には表示時間)を変更できるようにするために、(ツールチップまたはラベルの代わりに)TextBoxコントロールをユーザーに表示する必要があります。

==編集2==

代替テキストhttp://lh4.ggpht.com/_1TPOP7DzY1E/Sy9Mk8-Z-xI/AAAAAAAACzo/-5huzSd59j4/s800/UserControl.png

これは私の「透明な」UserControlデザインです

代替テキストhttp://lh5.ggpht.com/_1TPOP7DzY1E/Sy9MlM31jUI/AAAAAAAACzs/xIJ0hcgOzwo/s800/UserControlForm.png

これは実行モードのフォームです(ボタンをカバーするユーザーコントロールの「透明な」領域)。

これは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);
        }
    }
}

=================

*説明は少し簡略化されています。私の実際のケースでは、カスタムの円形ポイントコンポーネント(:Microsoft.VisualBasic.PowerPacks.OvalShapeから)があります。ポイントは、時間位置にあるオブジェクトを表します。リンクされたラベルで、ポイントの時間を指定する必要があります。ユーザーは、時間ラベルをクリックすることで、ポイントの時間を変更できます。

4

1 に答える 1

2

ユーザーコントロールを作成します。透明性の問題の回避策の概要をここに示します。

于 2009-12-18T16:02:38.443 に答える