C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ラベルの透過とコントロールのロックについて


(過去ログ 72 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■41956 / inTopicNo.1)  ラベルの透過とコントロールのロックについて
  
□投稿者/ める (12回)-(2009/10/05(Mon) 16:01:56)

分類:[.NET 全般] 

お世話になっています。ご教授ください。

・画面いっぱいに透過したラベルを貼り付けて、
見た目は普通の画面だけど、コントロールは一切押せない
といった画面を作りたいのです。

ttp://youryella.wankuma.com/Library/Extensions/Label/Transparent.aspx

上記サイトで「透過するラベルを作成する」のは出来たのですが、
全てを透過しているので、コントロールをロックするという目的が
果たせません。
どのようにすれば実現させる事が出来るでしょうか?

と、言うのも、データの入力画面を表示画面としても使用したい
のですが、ボタン類も多く、単純にEnableプロパティをFalseに
してしまうとあちこちがグレーになり見栄えが良くありません。

「透過でロックする」方法ではなくても、ボタンのEnable
プロパティをFalseにしてもそのままの状態で表示できる方法でも
結構です。どなたかご教授いただけませんか?

環境はWinXP(SP3)/VS2005/C#/.net2.0です。
宜しくお願いします。

引用返信 編集キー/
■41963 / inTopicNo.2)  Re[1]: ラベルの透過とコントロールのロックについて
□投稿者/ Jitta on the way (452回)-(2009/10/05(Mon) 18:13:01)
No41956 (める さん) に返信

> と、言うのも、データの入力画面を表示画面としても使用したい
> のですが、ボタン類も多く、単純にEnableプロパティをFalseに
> してしまうとあちこちがグレーになり見栄えが良くありません。
ユーザーは、「押せる」と思っているのに、不便じゃないですかね?

100%透過させるのではなく、99%透過させてみるとか。
enable/disable ではなく、visible/unvisible とか。
引用返信 編集キー/
■41964 / inTopicNo.3)  Re[1]: ラベルの透過とコントロールのロックについて
□投稿者/ 魔界の仮面弁士 (1336回)-(2009/10/05(Mon) 18:21:33)
2009/10/05(Mon) 19:31:11 編集(投稿者)

No41956 (める さん) に返信
> ・画面いっぱいに透過したラベルを貼り付けて、
> 見た目は普通の画面だけど、コントロールは一切押せない
> といった画面を作りたいのです。

スクロールが発生する可能性のあるコントロール(DataGridView や ListBox や 複数行TextBox など)については、
「触れない」状態にする事は問題があるかと思います。

修正の手間はかかりますが、それぞれを触れなくするよりは、

・個々のコントールを ReadOnly 状態にする(背景色も、Window → Control などに変更)。
・イベント処理(Button の Click など)を無視するようにする(Enabled の方がユーザーに分かりやすいかも?)。
・値が変更された場合、元の値に復元するようなコードを書く(ComboBox 等)。
・閲覧画面時には、ユーザー操作を伴わないコントロール(Label等)への差し替えを行う。

などといった実装にした方が、利用者側には親切かと思います。
引用返信 編集キー/
■41965 / inTopicNo.4)  Re[1]: ラベルの透過とコントロールのロックについて
□投稿者/ 魔界の仮面弁士 (1337回)-(2009/10/05(Mon) 19:24:10)
No41956 (める さん) に返信
> 「透過でロックする」方法ではなくても、ボタンのEnable
> プロパティをFalseにしてもそのままの状態で表示できる方法でも
> 結構です。どなたかご教授いただけませんか?

無理矢理な実装。

・「触れなくしたいコントロール」を panel1 の上に載せておく。
・panel1 と同座標に、空の panel2 を非表示状態で配置。
・Show イベントにて panel1 の画面イメージを生成し、それを panel2 に割り当てた後、
 元の panel1 を非表示にし、代わりに panel2 を表示させる。


実装例。

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public Form2(bool locked, object 表示データ)
    {
        InitializeComponent();

        // データ表示処理

        if (!locked) return;

        Shown += delegate
        {
            Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.Clear(Color.Black);
                panel2.Hide();
                panel1.Show();
                Point p = panel1.Parent.PointToScreen(panel1.Location);
                Update();
                g.CopyFromScreen(p.X, p.Y, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
            }
            panel2.BackgroundImage = bmp;
            panel1.Hide();
            panel2.Show();
        };
    }
}

引用返信 編集キー/
■41998 / inTopicNo.5)  Re[2]: ラベルの透過とコントロールのロックについて
□投稿者/ める (14回)-(2009/10/06(Tue) 11:44:24)
Jitta on the wayさん
魔界の仮面弁士さん

遅くなりました。レスありがとうございます。


>スクロールが発生する可能性のあるコントロール(DataGridView や ListBox や 複数行TextBox など)については、
>「触れない」状態にする事は問題があるかと思います。

やはり、個々のコントロールごとに制御するのが
セオリーと言うか普通なんですよね。

実はこの画面は既に3つの使い方があって
データの閲覧機能で4つ目なんですよね。
コード量も多くなってしまっているので、
横着してお手軽に・・・なんて考えていたのですが(^^;
やはり個別に対応しようと思います。

ありがとうございました。

※送信押してから「Service Unavailable」は簡便して(>_<)

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -