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

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

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

Re[6]: テキストボックスの前景色


(過去ログ 57 を表示中)

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

■32350 / inTopicNo.1)  テキストボックスの前景色
  
□投稿者/ よし (2回)-(2009/02/05(Thu) 12:30:02)

分類:[C#] 

入力を不可にしたテキストボックスの前景色を
変更したいと思い調べて、以下のサイトを見つけました。

http://dobon.net/vb/dotnet/control/tbenabledfalse.html

どうやら、ひと手間かかるようなので、ReadOnly属性で代用しようと
考えたのですが、ReadOnly属性の場合でも前景色が黒に強制変更されて
しまいます。
別のプロパティが関係しているのでしょうか?

ちなみにテキストボックスは動作時にReadOnlyにするのではなく
開発環境上で既に設定しており、文字列を動的に入れています。

VS2005/C#/.net2.0/で開発しています。
よろしくお願いします。



引用返信 編集キー/
■32352 / inTopicNo.2)  Re[1]: テキストボックスの前景色
□投稿者/ .SHO (652回)-(2009/02/05(Thu) 12:54:44)
No32350 (よし さん) に返信

> どうやら、ひと手間かかるようなので、ReadOnly属性で代用しようと
> 考えたのですが、ReadOnly属性の場合でも前景色が黒に強制変更されて
> しまいます。

前景色を設定するタイミングかも知れないですね?

> ちなみにテキストボックスは動作時にReadOnlyにするのではなく
> 開発環境上で既に設定しており、文字列を動的に入れています。

では、動作時にReadOnlyにしてみてはどうでしょう?
引用返信 編集キー/
■32353 / inTopicNo.3)  Re[2]: テキストボックスの前景色
□投稿者/ よし (4回)-(2009/02/05(Thu) 13:11:41)
No32352 (.SHO さん) に返信
> では、動作時にReadOnlyにしてみてはどうでしょう?

試してみましたが、ダメでした。
ちなみに、極々簡単なサンプルで、
フォームにtextBoxを1つとボタンを3つを
貼り付けてテストしてみました。
(プロパティはすべてデフォルト。)

namespace TestApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = "TestTestTestTest";
            this.textBox1.ForeColor = Color.Red;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (this.textBox1.ReadOnly == true)
                this.textBox1.ReadOnly = false;
            else
                this.textBox1.ReadOnly = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (this.textBox1.Enabled == true)
                this.textBox1.Enabled = false;
            else
                this.textBox1.Enabled = true;
            }
        }
}

おかしいのは私だけでしょうか????
最悪はラベルを重ねるって方法で手を抜くしかないですかねぇ・・・。

引用返信 編集キー/
■32354 / inTopicNo.4)  Re[3]: テキストボックスの前景色
□投稿者/ .SHO (653回)-(2009/02/05(Thu) 13:15:04)
No32353 (よし さん) に返信

> this.textBox1.Text = "TestTestTestTest";
> this.textBox1.ForeColor = Color.Red;

関係ないかも知れないけど、この2行の順番を逆にしてもダメですか?

引用返信 編集キー/
■32360 / inTopicNo.5)  Re[4]: テキストボックスの前景色
□投稿者/ よし (5回)-(2009/02/05(Thu) 13:27:22)
No32354 (.SHO さん) に返信

試してみましたが変わりませんね・・・。
引用返信 編集キー/
■32362 / inTopicNo.6)  Re[5]: テキストボックスの前景色
□投稿者/ .SHO (654回)-(2009/02/05(Thu) 13:46:42)
No32360 (よし さん) に返信

button2とbutton3を押すタイミングや組み合わせもあるけど
やってることは問題なさそうですね(今、試せる環境にないのが残念)。

参照したサイトが間違ってるのかも?
引用返信 編集キー/
■32364 / inTopicNo.7)  Re[3]: テキストボックスの前景色
□投稿者/ 魔界の仮面弁士 (991回)-(2009/02/05(Thu) 14:03:11)
No32353 (よし さん) に返信
> 試してみましたが、ダメでした。

BackColor に「Color.Empty 以外」を割り当てておくと、
ReadOnly にしても、ForeColor が有効になるようです。少なくとも当方環境では。
引用返信 編集キー/
■32365 / inTopicNo.8)  Re[4]: テキストボックスの前景色
□投稿者/ よし (6回)-(2009/02/05(Thu) 14:16:52)
No32364 (魔界の仮面弁士 さん) に返信
> BackColor に「Color.Empty 以外」を割り当てておくと、
> ReadOnly にしても、ForeColor が有効になるようです。少なくとも当方環境では。

開発環境上で、BackColorに「SystemColors.Control」を
設定するようにして動くようになりました。

デフォルトだとSystemColors.Windowが設定されていると
思いますが、Color.Emptyと同義・・・ではないですよね?
何がどう関係しているのでしょうか?

希望の動作は出来ましたので、解決済みとさせて頂きますね。
.SHOさん、魔界の仮面弁士さんありがとうございました。


解決済み
引用返信 編集キー/
■32366 / inTopicNo.9)  Re[5]: テキストボックスの前景色
□投稿者/ 魔界の仮面弁士 (992回)-(2009/02/05(Thu) 14:26:08)
2009/02/05(Thu) 14:46:42 編集(投稿者)

# 追加質問になっているようなので、解決済みチェックを外しておきます。

No32365 (よし さん) に返信
> デフォルトだとSystemColors.Windowが設定されていると思いますが、

半分正解・半分不正解です。

> Color.Emptyと同義・・・ではないですよね?
> 何がどう関係しているのでしょうか?

貼ったばかりの TextBox に対して、デザイナ上で ReadOnly プロパティを切り替えてみてください。
それに応じて、BackColor が Window/Control と切り替わりますよね。
なので、初期値が Window というわけではありません。

また、ReadOnly = False であっても、内部的な初期値は Window ではありません。
試しに、開発環境から何か別の色を割り当てた後、Window を再割り当ててみてください。
BackColor プロパティの値が、「太字の "Window"」で表示されますよね。
その後、BackColor を右クリックして、[リセット]を選択してみてください。細字に戻ります。

どちらも同じ "Window" ながら、太字(設定値)と細字(既定値)が変化しています。

すなわち、見た目上の既定値として Window が割り当てられているように見えますが、
実際の初期値は Window ではないという事です。実は Empty が割り当てられています。


そして内部値が Empty の場合、ReadOnly の切り替えによって、BackColor = Window/Control が
切り替わるようになっています。Empty 以外が指定されている場合は切り替わりません。
引用返信 編集キー/
■32369 / inTopicNo.10)  Re[6]: テキストボックスの前景色
□投稿者/ よし (7回)-(2009/02/05(Thu) 15:45:01)
No32366 (魔界の仮面弁士 さん) に返信

> # 追加質問になっているようなので、解決済みチェックを外しておきます。

すみません。お手数おかけします。

>どちらも同じ "Window" ながら、太字(設定値)と細字(既定値)が変化しています。
確かになりますね。今までも別の作業でこういった挙動を見かけた事が
ありましたがそういう理由だったのですね。

> すなわち、見た目上の既定値として Window が割り当てられているように見えますが、
> 実際の初期値は Window ではないという事です。実は Empty が割り当てられています。

なるほど・・・そうなるとプログラムが動作をはじめて、プロパティがEmptyだったら
内部で規定の値が使われるって考えなのですね。。
勉強になりました。

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

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -