VC++ TextBoxの定義

このQ&Aのポイント
  • c++でTextBoxの入力制限(数値のみ)を作成する方法について
  • TextBoxの動作を定義する際に発生するコンパイルエラーについて
  • エラー内容を解決するために必要な宣言方法について
回答を見る
  • ベストアンサー

VC++ TextBoxの定義

お世話になります。 c++でTextBoxの入力制限(数値のみ)を、下記URLを参考に作成しているのですが、 TextBoxの動作を定義するところが、コンパイルエラーになります。 http://dobon.net/vb/dotnet/control/numerictextbox.html 【エラーになる定義部】 this->TextBox->KeyPress += System::Windows::Forms::KeyEventHandler(this, &MainForm::KeyPressEventArgs); ※ エラー内容は「XXXはYYYのメンバではありません」 「system::」のところか「&MainForm」のところの定義が悪いのだと思うのですが、 どの様に宣言すればよいのか教えていただけないでしょうか 【関数】 System::Void TextBox_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { 本文 }

質問者が選んだベストアンサー

  • ベストアンサー
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

VisualStudioを使用しているのであれば、プログラムからではなくダイアログエディタのテキストボックスのイベントからKeyPressのイベントを追加するのが良いのでは。 あと、参考にしているページはVB、C#なので、C++とは記述方法などが異なります。 C++/CLIならFormが使用できるけれども、普通のC++だと.NetFrameworkのFormは使えないんじゃなかったっけか。

関連するQ&A

  • VB2005 TextBoxの入力制限について

    はじめて質問させていただきます。 現在、VB2005を使ってプログラムを組んでいるのですが、半角カタカナだけをTextBoxに入力し、表示する方法がわかりません。 Private Sub TextBox6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox6.KeyDown TextBox6.ImeMode = Windows.Forms.ImeMode.KatakanaHalf End Sub Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress If (e.KeyChar < "ア"c Or e.KeyChar > "-"c) And e.KeyChar <> vbBack Then e.Handled = True End If End Sub ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

  • 特定の文字を、入力文字数に含めない方法は(VB.NET)

    VB.NETにて特定の文字を、入力文字数に含めないようにするにはどのような処理を行ったらよいのでしょうか? 以下は実際に試みた方法です。「型 'TextBox' でパブリック メンバ 'TextLength' が見つかりません。」というエラーがおきました。 Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress 'マイナスかドットであるか判定 If e.KeyChar = "-" OrElse e.KeyChar = "." Then sender.TextLength = sender.TextLength - 1 End If End Sub

  • クラスやモジュールで纏める方法ありますか?

    説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_2.KeyPress If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_4.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_5_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_5.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack And e.KeyChar <> ","c Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub 上記のプログラム、TextBox○○○_5.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、ほかのクラスやモジュールにまとめる方法ってありませんか? よろしくお願いしますm(__)m

  • 数字のみの入力制限をかけたTextBoxで、"."の入力も許可したい

    環境はVB.NETです。 以下のコードで、TextBoxへの入力を、0~9の数字のみ(BackSpaceも許可)に制限していますが、"."(少数点)の入力も許可したいです。 e.KeyChar = "."c の判定をIf文に追加してみましたが、実現できませんでした。 ご教授いただけると幸いです。 よろしくお願いします。 Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress  If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then   e.Handled = True  End If End Sub

  • 「VC++2008」の「Invalidate」について

    「VC++2008 Express Edition」の入門者です。「Invalidate」の動作で悩んでいます。 動作は、「マウスを左クリックしたところに赤印を付ける」と言う物です。 最初、以下の様に「Form1」での時には問題なく動いていました。 -------------------------------------------------------------------------------- //マウスクリック   private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { //~~~~~~~~~~~~~~ //      マウス処理 //~~~~~~~~~~~~~~       Invalidate();   } //画面描画   private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { //~~~~~~~~~~~~~~ //      赤印を付ける //~~~~~~~~~~~~~~   } -------------------------------------------------------------------------------- 上記では、マウスを左クリックすると赤印がすぐに付き、問題はありませんでした。 上記を「Form1」から「panel4」上に書き換えたのが下記です。 -------------------------------------------------------------------------------- //マウスクリック   private: System::Void panel4_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { //~~~~~~~~~~~~~~ //      マウス処理 //~~~~~~~~~~~~~~       Invalidate();   } //画面描画   private: System::Void panel4_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) { //~~~~~~~~~~~~~~ //      赤印を付ける //~~~~~~~~~~~~~~   } -------------------------------------------------------------------------------- 上記では、マウスを左クリックしても赤印が書かれません。 一度別のプログラムなどに行って、赤印の場所が隠れて、またはこのプログラムWindowsを移動して、 赤印の場所を画面外に出して見えなくしてから戻った瞬間に赤印が書かれます。 上記の動作をInvalidateがしてるとは思うのですが・・・ Invalidateの使い方(updateも関係?)を教えて頂きたく、質問いたしました。 宜しくお願いいたします。

  • C#で、テキストボックスの入力について。

    テキストボックスに数値しか入力させないようにし、さらにそれを3桁のコンマ区切りで表示しています。 以下の文でやっています。 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b' ) { e.Handled = true; } } private void textBox1_Leave(object sender, EventArgs e) { this.textBox1.Text = string.Format("{0:#,0}", ulong.Parse(this.textBox1.Text)); } 上の方では数値のみの入力制限、下の方では桁区切りを実行しています。 これでうまくいくのですが、エラーが一つ出ます。 一度数字を入力し、リーブしたらもう桁区切りがなされます。 しかしそれを書き換える、例えば全部消してから書き換えるのでなく、桁数が一文字多かったので消そうというときに、一つ消してリーブすると、コンマが入っているためにエラーになります。 これを防ぐにはどうすればいいでしょうか? また、ただそれだけでは、桁区切りがおかしくなるはずです。 できれば書き換えた後に、新たに桁区切りがなされるようにしたいのですがやはり難しいでしょうか?

  • VC2010プログラミング

    formの中に自作のクラスを定義して使用したいのですが、どこに定義すればよいのかわかりません。 #pragma once #include "XXX.h" namespace FileRename { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Form1 の概要 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクター コードを追加します // } protected: /// <summary> /// 使用中のリソースをすべてクリーンアップします。 /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; XXX^ instance = gcnew XXX(); protected: private: /// <summary> /// 必要なデザイナー変数です。 /// </summary> System::ComponentModel::Container ^components;   ・   ・   ・ } XXXクラスはこの場所で定義するのは間違いなのでしょうか?

  • TextBoxへ文字列をD&Dをする方法を教えてください。

    Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text)(0) End Sub VB.NETで上記のような方法でドラッグされたテキストを テキストボックスに表示するようにしたいのですが、 この方法だと最初の一文字しかドロップされません。 どこか修正箇所などありましたら、ご教示いただけると助かります。

  • VC++

    フォームアプリを作成しており、実装に関して不明点があるため質問させて頂きます。 やりたいこととしては、Formでないファイル(クラス)でFormのコンポーネントを 操作したいことです。 具体的に、重たい処理を別スレッドで処理させて、処理中の経過をFormの プログレスバーに表示することです。 重たい処理は別ファイル(クラス)で行います。 以下に大まかなコードを記載します。 ----------------------------------------------------- ---- Form.h ---- #include "Main.h" namespace XXX { public ref class Form1 : public System::Windows::Forms::Form {  Main^ mMain;    // ボタン押下  private: System::Void btn_Click(System::Object^ sender, System::EventArgs^ e) {   backgroundWorker1->RunWorkerAsync();  }  // ワーカ  private: System::Void backgroundWorker1_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {   mMain->func();    } }; } ---- Main.c ---- Main::func() {  // 処理をしつつプログレスバーのValueを更新 } ----------------------------------------------------- 重たい処理をForm内で処理するのであればデリゲートを使用すれば出来そうです。 上記のようなケースでも適用できますか? また、別の方法があれば教えてください。

  • VC++フォームアプリケーション でのビットマップ処理

    私は今Visual Studio 2005(C++)のフォームアプリケーションでプログラムを組んでいるのですが、ビットマップ処理ができません。以下のプログラムにどのような変更を加えればできるようになるのでしょうか? ご存知の方がいたら教えてください。 #pragma once ~フォームのデザイン部分のプログラム(自動)なので省略いたします~ #pragma endregion private: Bitmap^ bmp; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { OpenFileDialog^ myDLG = gcnew OpenFileDialog(); myDLG->AddExtension = true; myDLG->DefaultExt = "bmp"; myDLG->FileName = "*.bmp"; myDLG->ShowReadOnly = false; myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg"; if(myDLG->ShowDialog() == System::Windows::Forms::DialogResult::OK){ this->Text = myDLG->FileName; pictureBox1->Image = gcnew Bitmap(myDLG->FileName); Invalidate(); } } private: System::Void 保存SToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { SaveFileDialog^ myDLG = gcnew SaveFileDialog(); myDLG->AddExtension = true; myDLG->DefaultExt = "bmp"; myDLG->FileName = "*.bmp"; myDLG->Filter = "ビットマップ(*.bmp) | *.bmp | jpeg(*.jpg;*.jpeg) | *.jpg;*.jpeg | すべてのファイル(*.*) | *.*"; if(myDLG->ShowDialog() != System::Windows::Forms::DialogResult::OK){ return; } pictureBox1->Image->Save(myDLG->FileName); Invalidate(); } private: System::Void 閉じるCToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { if(MessageBox::Show("アプリケーションを終了しますか?","画像描画",MessageBoxButtons::OKCancel,MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::OK){ this->Close(); } } private: System::Void 編集ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void 回転180ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { } } よろしくお願いします。

専門家に質問してみよう