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

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

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

Re[1]: キーダウンイベント時の音?


(過去ログ 54 を表示中)

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

■30619 / inTopicNo.1)  キーダウンイベント時の音?
  
□投稿者/ ただいま落ちこぼれ中 (3回)-(2008/12/28(Sun) 00:39:50)

分類:[C#] 

C#開発中です。

Windowsアプリ作成中で未熟な為か対策がわからずご教授願えたらと思います

RichTextBoxを配置しEnableはfalseにしてます。(EnableをFalseにしないとキーダウンイベントを呼べなかった為)
キーダウンイベントに処理があります。(仮に何も書かないものとして)
仮にそれだけの状態で実行するとどのキーを押してもポンと音が出てしまいます。(入力しようとして入力できないための音?)
その毎回なってしまう音を回避したいのですが方法がわかりません。
どのようにしたらいいのかご教授願います

お願い致します
引用返信 編集キー/
■30620 / inTopicNo.2)  Re[1]: キーダウンイベント時の音?
□投稿者/ やじゅ (895回)-(2008/12/28(Sun) 00:51:08)
やじゅ さんの Web サイト
No30619 (ただいま落ちこぼれ中 さん) に返信
> 仮にそれだけの状態で実行するとどのキーを押してもポンと音が出てしまいます。(入力しようとして入力できないための音?)
> その毎回なってしまう音を回避したいのですが方法がわかりません。

単一行テキストボックスでEnterやEscapeキーを押した時にビープ音が鳴らないようにする
http://dobon.net/vb/dotnet/control/tbsuppressbeep.html

KeyEventArgs.SuppressKeyPressプロパティ
引用返信 編集キー/
■30621 / inTopicNo.3)  Re[2]: キーダウンイベント時の音?
□投稿者/ ただいま落ちこぼれ中 (4回)-(2008/12/28(Sun) 01:08:48)
No30620 (やじゅ さん) に返信
> ■No30619 (ただいま落ちこぼれ中 さん) に返信
>>仮にそれだけの状態で実行するとどのキーを押してもポンと音が出てしまいます。(入力しようとして入力できないための音?)
>>その毎回なってしまう音を回避したいのですが方法がわかりません。
>
> 単一行テキストボックスでEnterやEscapeキーを押した時にビープ音が鳴らないようにする
> http://dobon.net/vb/dotnet/control/tbsuppressbeep.html
>
> KeyEventArgs.SuppressKeyPressプロパティ

回答有難う御座います。ですが以前にそちらのサイトは拝見しまして試しましたがそもそもエンターキーではビープ音はなりません。
その他AからZのキーすべてでなるため関係ないかなとサイトを見飛ばしておりましたが、いま
フォームのAcceptButton、CancelButtonプロパティを設定する方法を試しましたがやはりエンたーではなりませんが、普通のキーで音が鳴り止みません。

引き続きお願い致します
引用返信 編集キー/
■30622 / inTopicNo.4)  Re[3]: キーダウンイベント時の音?
□投稿者/ ただいま落ちこぼれ中 (5回)-(2008/12/28(Sun) 01:18:07)
No30621 (ただいま落ちこぼれ中 さん) に返信
> ■No30620 (やじゅ さん) に返信
>>■No30619 (ただいま落ちこぼれ中 さん) に返信
> >>仮にそれだけの状態で実行するとどのキーを押してもポンと音が出てしまいます。(入力しようとして入力できないための音?)
> >>その毎回なってしまう音を回避したいのですが方法がわかりません。
>>
>>単一行テキストボックスでEnterやEscapeキーを押した時にビープ音が鳴らないようにする
>>http://dobon.net/vb/dotnet/control/tbsuppressbeep.html
>>
>>KeyEventArgs.SuppressKeyPressプロパティ
>
> 回答有難う御座います。ですが以前にそちらのサイトは拝見しまして試しましたがそもそもエンターキーではビープ音はなりません。
> その他AからZのキーすべてでなるため関係ないかなとサイトを見飛ばしておりましたが、いま
> フォームのAcceptButton、CancelButtonプロパティを設定する方法を試しましたがやはりエンたーではなりませんが、普通のキーで音が鳴り止みません。
>
> 引き続きお願い致します

ちなみにですがEnableをTrueにすると音はなりません。ですがイベント処理に飛びません。

引用返信 編集キー/
■30624 / inTopicNo.5)  Re[4]: キーダウンイベント時の音?
□投稿者/ あ (37回)-(2008/12/28(Sun) 01:33:04)
No30622 (ただいま落ちこぼれ中 さん) に返信
>RichTextBoxを配置しEnableはfalseにしてます。(EnableをFalseにしないとキーダウンイベントを呼べなかった為)
> ちなみにですがEnableをTrueにすると音はなりません。ですがイベント処理に飛びません。

そこがまずおかしいと思うですよ。
Enabled = FalseなコントロールはFocusを受け取れないし、そもそもKeyDownイベントは発生しないはずです。
現象が再現可能なミニマムコードを提示してくりゃれ。
引用返信 編集キー/
■30625 / inTopicNo.6)  Re[1]: キーダウンイベント時の音?
□投稿者/ たくボン (130回)-(2008/12/28(Sun) 01:42:25)
No30619 (ただいま落ちこぼれ中 さん) に返信
> RichTextBoxを配置しEnableはfalseにしてます。(EnableをFalseにしないとキーダウンイベントを呼べなかった為)
> キーダウンイベントに処理があります。(仮に何も書かないものとして)
> 仮にそれだけの状態で実行するとどのキーを押してもポンと音が出てしまいます。(入力しようとして入力できないための音?)

この文章を読むと、RichTextBoxのEnableはfalseだと思うんだけど、falseの時なのにKeyDownイベントって発生するの?
それともコードの中で「キーダウンイベントを呼ぶ」の?

質問する時は、第三者が読んでもわかり易く書かないと回答もしにくいですね:-)
引用返信 編集キー/
■30626 / inTopicNo.7)  Re[5]: キーダウンイベント時の音?
□投稿者/ ただいま落ちこぼれ中 (6回)-(2008/12/28(Sun) 01:46:02)
2008/12/28(Sun) 01:46:49 編集(投稿者)

No30624 (あ さん) に返信
> ■No30622 (ただいま落ちこぼれ中 さん) に返信
> >RichTextBoxを配置しEnableはfalseにしてます。(EnableをFalseにしないとキーダウンイベントを呼べなかった為)
>>ちなみにですがEnableをTrueにすると音はなりません。ですがイベント処理に飛びません。
>
> そこがまずおかしいと思うですよ。
> Enabled = FalseなコントロールはFocusを受け取れないし、そもそもKeyDownイベントは発生しないはずです。
> 現象が再現可能なミニマムコードを提示してくりゃれ。
すみません、書き忘れましたキーダウンはフォームのキーダウンを使用しております。

かりにですがテキストのキーダウンを使ったとしてEnableをtrueにすると思ったことが出来ません
(入力した文字を判定して一致していたら表示している文字の色を変化させる)
そのままですと判定の前に入力した文字が入力されてしまいます。
ではその状態でReadOnlyをfalseにしたらどうなるか・・・ビープ音がやはり鳴ります。




引用返信 編集キー/
■30627 / inTopicNo.8)  Re[4]: キーダウンイベント時の音?
□投稿者/ やじゅ (896回)-(2008/12/28(Sun) 01:46:45)
やじゅ さんの Web サイト
2008/12/28(Sun) 03:48:03 編集(投稿者)
No30622 (ただいま落ちこぼれ中 さん) に返信

>すみません、書き忘れましたキーダウンはフォームのキーダウンを使用しております。
やっぱり

>入力した文字を判定して一致していたら表示している文字の色を変化させる
これを最初の質問に書いてほしかったな

「Hello」って入力されたら、赤文字に変換する。
TextChangeイベントを使ってます。
サンプルは、キーワードが全角文字だと駄目って課題が残ってるけど。

    public partial class Form1 : Form
    {
        private bool isChange_ = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            if (isChange_ == false)
            {
                isChange_ = true;
                keywordHighlighting(ref richTextBox1, "Hello");
            }
            isChange_ = false; 
 
        }

        // 共通関数 :キーワードハイライティング 
        public void keywordHighlighting(ref RichTextBox richTextBox, string keyWord)
        {

            int index = 0;
            int ctbl = 0;
            string rtfRead = null;

            index = richTextBox.SelectionStart;

            // RTF形式のテキストを取得 
            rtfRead = richTextBox.Rtf;

            // 文字修飾クリア 
            rtfRead = rtfRead.Replace("\\cf1\\b ", "");
            rtfRead = rtfRead.Replace("\\\\b0\\cf0 ", "");
            //カラーテーブルを追加 
            ctbl = rtfRead.IndexOf("\\viewkind");
            if (ctbl != 0)
            {
                rtfRead = rtfRead.Substring(0, ctbl - 1) + "{\\colortbl ;\\red255\\green0\\blue0;}\n" + rtfRead.Substring(ctbl);
            }

            //Replace メソッドで文字列の置換 
            string rtf = null;
            string replaceWith = null;
            string pattern = null;
            Regex reg = null;

            pattern = "(" + keyWord + ")";
            replaceWith = "\\cf1\\b $1\\b0\\cf0 ";
            reg = new Regex(pattern, RegexOptions.IgnoreCase);

            rtf = reg.Replace(rtfRead, replaceWith);
            richTextBox.Rtf = rtf;
            richTextBox.SelectionStart = index;
        }
    }

引用返信 編集キー/
■30628 / inTopicNo.9)  Re[6]: キーダウンイベント時の音?
□投稿者/ たくボン (131回)-(2008/12/28(Sun) 02:25:43)
2008/12/28(Sun) 02:25:56 編集(投稿者)
No30626 (ただいま落ちこぼれ中 さん) に返信
> すみません、書き忘れましたキーダウンはフォームのキーダウンを使用しております。
そんな気はしてた。

> かりにですがテキストのキーダウンを使ったとしてEnableをtrueにすると思ったことが出来ません
> (入力した文字を判定して一致していたら表示している文字の色を変化させる)

「仮にですが」を質問の最初から多用されてますが、本当にしてる処理は何なんでしょうか?

> そのままですと判定の前に入力した文字が入力されてしまいます。

これは当たり前の動作。

> ではその状態でReadOnlyをfalseにしたらどうなるか・・・ビープ音がやはり鳴ります。

俺の環境では鳴らないんだけどなぁ?
要は、こんな感じの事をしたいんだよね?(RichTextBox.Enable=false, Form.KeyPreview=true)

Private Sub Form2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.A Then
        Me.RichTextBox1.SelectionStart = 2
        Me.RichTextBox1.SelectionLength = 2
        Me.RichTextBox1.SelectionColor = Color.Red
    End If
End Sub

何かいらんことしてないですか?
まず、問題を切り分ける事が先決なんじゃないのかな?

引用返信 編集キー/
■30633 / inTopicNo.10)  Re[5]: キーダウンイベント時の音?
□投稿者/ やじゅ (897回)-(2008/12/28(Sun) 14:10:28)
やじゅ さんの Web サイト
> サンプルは、キーワードが全角文字だと駄目って課題が残ってるけど。

全角に対応、「テスト」って入力されたら、赤文字に変換する。
C#は、まだ不慣れですね(^^;
でもって不具合とかあると思いますが、簡易サンプル的にはいいと思う。

    public partial class Form1 : Form
    {
        enum CharType
        {
            None,
            Hankaku,
            Zenkaku
        }

        private bool isChange_ = false;
        private string keyWord_ = null;


        public Form1()
        {
            InitializeComponent();

            keyWord_ = rtfEncoding("テスト");

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            if (isChange_ == false)
            {
                isChange_ = true;
                keywordHighlighting(ref richTextBox1, keyWord_);
            }
            isChange_ = false; 
 
        }

        // 共通関数 :キーワードハイライティング 
        public void keywordHighlighting(ref RichTextBox richTextBox, string keyWord)
        {

            int index = 0;
            int ctbl = 0;
            string rtfRead = null;

            index = richTextBox.SelectionStart;

            // RTF形式のテキストを取得 
            rtfRead = richTextBox.Rtf;

            // 文字修飾クリア 
            rtfRead = rtfRead.Replace("\\cf1\\b ", "");
            rtfRead = rtfRead.Replace("\\\\b0\\cf0 ", "");
            //カラーテーブルを追加 
            ctbl = rtfRead.IndexOf("\\viewkind");
            if (ctbl != 0)
            {
                rtfRead = rtfRead.Substring(0, ctbl - 1) + "{\\colortbl ;\\red255\\green0\\blue0;}\n" + rtfRead.Substring(ctbl);
            }

            //Replace メソッドで文字列の置換 
            string rtf = null;
            string replaceWith = null;
            string pattern = null;
            Regex reg = null;

            pattern = "(" + keyWord + ")";
            replaceWith = "\\cf1\\b $1\\b0\\cf0 ";
            reg = new Regex(pattern, RegexOptions.IgnoreCase);

            rtf = reg.Replace(rtfRead, replaceWith);
            richTextBox.Rtf = rtf;
            richTextBox.SelectionStart = index;
        }

        //キーワードをRTF形式文字列(正規表現の置換用)に変換
        string rtfEncoding(string keyWord)
        {
            //日本語RTFはシフトJISを使用
            Encoding sjis = Encoding.GetEncoding("Shift_JIS");
            string result = null;
            bool isFirst = false;
            CharType charType = CharType.None;  

            for (int i = 0; i < keyWord.Length; ++i)
            {
                byte[] bstr = sjis.GetBytes(keyWord.Substring(i, 1));
                if (bstr.Length > 1)
                {
                    //全角 2Byte
                    if (isFirst == false && charType == CharType.Hankaku)
                    {
                        isFirst = true;
                        result += "\\\\f1";
                    }
                    charType = CharType.Zenkaku;  
                    for (int j = 0; j < bstr.Length; ++j)
                        result += "\\\\'" + bstr[j].ToString("x");

                }
                else
                {
                    //半角 1Byte
                    if (isFirst == true && charType == CharType.Zenkaku)
                    {
                        result += "\\\\f0 ";
                    }
                    result += keyWord.Substring(i, 1);
                    charType = CharType.Hankaku;  
                    isFirst = false;
                }
            }

            return result;
        } 
    }

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -