VB 2008でキーボードから入力される文字を受け取る関数の作成は可能でしょうか?
- VB 2008Expressをダウンロードし、キーボードから入力される文字を受け取る関数の作成について悩んでいます。
- 特定の関数名は既に存在しているため、新たに作成する必要がありますが、GetCharという関数が似ているため、同じ名前は使用できません。
- 実際にはファイルから1文字ずつ読み込む関数を作成しており、それとは異なる機能の関数を作成したいと考えています。演習中のため、VB 2008 ExpressでWindowsアプリケーションを使用しています。
- ベストアンサー
キーボードから入力される文字を受け取る関数?
VB 2008 でキーボードから入力される文字を受け取る関数の作成は可能でしょうか? Module Main Sub Main() Dim nc As Long nc = 0 While FileSeek("D:\Temp\Test.txt", nc + 1) <> "" nc = nc + 1 End While Debug.Print(nc) End Sub End Module △ While FileSeek("D:\Temp\Test.txt", nc + 1) <> "" ○ While GetChar() <> "" もちろん、GetCharってのはありますので同じ名前では無理。 でも、こういう関数を欲している訳です。 OKWaveに助けられて FileSeek()ってのを作成しました。 が、これはファイルから1文字づつ読む関数。 欲している関数とは違います。 VB 2008Expressをダウンロードし某テキストの例題を初めから演習しています。 なにせ、プログラマでもないのに初めての言語ということで悪戦苦闘です。 そして、今、僅かに3題目。 宜しくお願いします。 なお、コンソールではなくWindowsアプリケーションで演習中です。
- Visual Basic
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Win32APIの中にGetKeyState関数がおっしゃられるものに該当すると思います。 GetKeyStateを使用してキーボードをループで監視します。 状態の変化に応じて、文字を接続するということになりますでしょうか。 WindowsFormアプリケーションであれば、KeyPressイベントを利用することができるため、GetKeyStateを利用するよりも簡単です。 新しいプロジェクト→WindowsFormアプリケーション Public Class Form1 Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress Dim str As String = e.KeyChar Debug.WriteLine(str) End Sub End Class と記述します。
その他の回答 (1)
- AKARI0418
- ベストアンサー率67% (112/166)
補足となりますが、GetKeyState関数の使用法が挙げられているので紹介いたします。 http://www.tees.ne.jp/~itagaki/vb/102.htm
お礼
大体、方向性が明らかになったので閉め切ります。
関連するQ&A
- VB2008 Formを関数の引数にする
お世話になります VB2008で開発をしています Formを2つ作成し どちらも同じ名称のテキストBOX(TextBox1)コントロールを貼り付けています Publicの関数でそれぞれのFormに値をセットしたいのですが 「'TextBox1' は 'System.Windows.Forms.Form' のメンバではありません。」 とエラーが発生してしまいます 初歩的な質問で申し訳ありませんが ご助言頂けると助かります 宜しくお願い致します ソース: --------------------------------------------------- Module Module1 Public Sub Main() Dim Form1 As New Form1 Dim Form2 As New Form2 SetValue(Form1) SetValue(form2) End Sub Private Sub SetValue(ByVal obj As Form) obj.TextBox1 = "TEST" End Sub End Module ---------------------------------------------------
- ベストアンサー
- Visual Basic
- VB.NETでDLL関数を呼び出すには
VB.NETでDLLの関数を呼び出す時に、 NewではなくCreateObject()を使って呼び出すには、 どのように記述をすればよいのでしょうか。 具体的には、 ソリューション名 ClassLibrary1で ---------------------------------- Imports System.Windows.Forms Public Class Class1 Public Sub test() MessageBox.Show("テスト") End Sub End Class ---------------------------------- のコードをビルドしてClassLibrary1.dllを生成して、 ソリューション名 ConsoleApp1で ---------------------------------- Imports ClassLibrary1 Module Module1 Sub Main() Dim obj As Class1 obj = New Class1() 'obj = CreateObject("Class1") obj.test() End Sub End Module ---------------------------------- のコードをビルドして実行すると、 正しく実行できますが、 obj = New Class1() を obj = CreateObject("Class1") のようにすると図のようなエラーになります。 Newではなく、CreateObject()を使ってDLLを呼び出すには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。 (Windows10)(Visual Studio 2022)
- 締切済み
- Visual Basic
- VB.NETのデリゲートについて
VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class
- 締切済み
- Visual Basic
- 関数の引数
こんにちわ。 ご存知の方、ご教授してもらえないでしょうか? VB.net2005を使っているのですが 関数の引数に変数をセットして、別関数で 引数に対してデータをセットすることは可能でしょうか? C言語でいうところのポインタを引数に渡し ポインタアドレスに書き込むような処理はVB.netでは 可能なんでしょうか? 下記のような事は試したのですが、うまく出来ませんでした(。。; public sub test1() dim mojiretu as string test2( mojiretu ) msgbox(mojiretu) end sub public sub test2( str as string) str = "文字列" end sub
- ベストアンサー
- Visual Basic
- MkDir関数
VBでフォルダを作成する、基本的なロジックを作成しています。 現在、仮にD:\にはフォルダが存在しないとして、 MkDir "D:\Test\Temp\" とするとエラーになってしまいます。 MkDir "D:\Test\" とするとフォルダが作成されるのですが、 その後に、 MkDir "D:\Test\Temp\" とすると、やはりエラーになってしまいます。 どのようにすれば、1つの処理の中で、複数階層のフォルダが作成できるのでしょうか? ちなみにVB6.0 SP5で、実際にはMkDir関数の引数は文字列変数です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- getchar関数について
初歩的なことなのかもしれませんが、お分かりになる方、教えてください。 getchar関数は、 int d; d = getchar(); のようにして使いますよね。 でも、 int c,d; do{ scanf("%d",&c) }while(c!= 0); d = getchar(); のように、getcharの前に繰り返し処理を置くとうまく実行できません。 なぜでしょう? ちなみにソフトはVisual C++6.0をつかってます。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語のisdigit関数を使った問題です。バッファ読み捨てがよく解りません。
5文字以内の入力文字を数字のみか文字が含まれているかで表示を変えたいです。main関数内では判定結果のみを表示して、文字列への文字の格納にはfgetsとgetcharを使い、副関数の引数はポインタ型のものを使い、判断は副関数内で行いその戻り値でmain関数で表示を分岐させます。副関数でwhileとisdigit関数の組み合わせ方と、戻り値の選択のやり方が解りません。どなたか詳しい方ぜひ教えていただければと思います。
- 締切済み
- C・C++・C#
- ファイルから指定位置の1文字を読み込むには?(VB2008)
D:\Temp\ForGrep.txt Ah Love! could you and I with Fate conspire To grasp this sorry Scheme of Things entere, Would not we shatter it to bits -- and then Re-mould it nearer to the heart's Desire! このようなファイルを読み込んで出力する演習をしています。 ' ============================== ' 全ての行を読み込んで出力する ' ============================== Module theGrap Sub Main() Dim iNow As Integer = 0 Dim iNext As Integer = 0 Do iNow = iNext Debug.Print(ReadLine("D:\Temp\ForGrep.txt", iNow, iNext)) Loop Until iNext = -1 End Sub End Module ReadLine 関数でファイルの先頭0バイト目から1行を読み込む。 ReadLine 関数は、次の行が存在する可能性があれば次の行の開始バイトを iNext に代入。 ReadLine 関数は、次の行が存在しなければ iNext には -1 を代入。 聞きたいのは、あるポジションから1文字づつ行末まで読み込む方法です。 ' ---------------------------------------- ' ファイルから指定位置の1文字を読み込む ' ---------------------------------------- Private Function GetString(ByVal fs As FileStream, _ ByVal iPP As Integer) As String Dim c As String = "" Dim d As String = "" Dim Buf(1) As Byte Dim ec As Encoding = Encoding.Default ' -------------------------------- ' 指定の位置より2バイト読み込む ' -------------------------------- fs.Seek(iPP, SeekOrigin.Begin) fs.Read(Buf, 0, Buf.Length) c = ec.GetString(Buf) ' ---------------------------------------------- ' 指定の位置より1バイト戻って2バイト読み込む ' ---------------------------------------------- If iPP > 0 Then fs.Seek(iPP - 1, SeekOrigin.Begin) fs.Read(Buf, 0, Buf.Length) d = ec.GetString(Buf) End If Return If(d.Length = 1, d, c.Substring(0, 1)) End Function 今、私は、このように非常にややこしい手順で1文字づつ読み込んでいます。 なんか、とんでもない無駄なことをしているような気がします。 多分、同じことが1行で出来るんではないかと思います。 「そんなややこしいことをしなくて、このようなやり方で」を教えて下さい。
- 締切済み
- Visual Basic
- VB2008 ファイルから指定位置の文字を読み込む方法??
D:\Temp\Test.txt abc123あいう亜伊宇 [イミディエイトウインドウ] ? FileSeek("D:\Temp\Test2.txt", 1) "a" ? FileSeek("D:\Temp\Test.txt", 7) "あ" ? FileSeek("D:\Temp\Test.txt", 8) "あ" 今、FileStream の Seek メソッドを利用した指定位置の文字を1文字だけ戻す関数を作成。 なんとか動作だけはしています。 そこで、私が質問したいのは日本語の扱いのエレガントな方法です。 Seek メソッドでは2バイト文字の1バイト目と2バイト目とを読むケースが発生します。 私は、いずれの場合も"□・"とかではなく"あ"を戻させたいと思っています。 そのために私が考えた方法は次ようです。 ' -------------------------------- ' 指定の位置より2バイト読み込む ' -------------------------------- fs.Seek(p - 1, SeekOrigin.Begin) fs.Read(Buf, 0, Buf.Length) C = ec.GetString(Buf) ' ------------------------------------------ ' 指定の位置より1つ戻して2バイト読み込む ' ------------------------------------------ If p > 1 Then fs.Seek(p - 2, SeekOrigin.Begin) fs.Read(Buf, 0, Buf.Length) D = ec.GetString(Buf) End If ・・・・・ ・・・・・ FileSeek2 = If(Len(D & "") = 1, D, Left(C, 1)) 仮に、最初の読み込みで3バイトを読み込んで2バイト目が何なのかを判別できると・・・。 そうすれば、2度読みする必要はないと思います。 そこで、その方法をご存じであればコードを含めて教えて頂ければ幸いです。
- 締切済み
- Visual Basic
- Evaluate()に文字列の形式の数式を渡すには
VB.NETでEvaluate()関数を使って、プログラム実行中に決まる数式を評価させたいのですが、下記の(A)のように数式を" "で囲まない形で渡せば正しく評価されるのですが、(B)のように数式が文字列の形になっていると、このまま、文字列を渡してもうまくいきません。(B)のような形になってしまっている数式をEvaluate()関数で評価させるためには、(B)から(A)の形に持っていきたいのですが、どのようにすればよいのかがよく分かりません。 数式の構造自体がプログラムの実行中に文字列の形で処理させて生成されるのですが、このように文字列の形になっている数式を、Evaluate()関数で評価させるためには、どのようにすればよいのでしょうか。 ---------------------------------------- Imports Microsoft.Office.Interop Module Module1 Sub Main() Dim xlApp As New Excel.Application Dim i1 As Integer Dim i2 As Integer Dim term_i As String Dim ans_i As Integer i1 = 2 i2 = 3 term_i = i1 + i2 + 5 ' (A) term_i = "i1 + i2 + 5" ' (B) ans_i = xlApp.Evaluate(term_i) MsgBox(ans_i) End Sub End Module ---------------------------------------- よろしくお願いします。(WindowsXP,VB2010)
- ベストアンサー
- Visual Basic
お礼
>Win32APIの中のGetKeyState関数・・・ >GetKeyStateを使用してキーボードをループで監視・・・ <キーボードをループで監視>ってところが、少々、仕掛けがいるようですね。 でも、それが一つのやり方ってことが判れば先に進めます。 感謝です。 KeyPressイベントは参考にします。 なお、片田舎のプログラマでもない素人ですのでかかる示唆は大変にありがたいです。