• ベストアンサー

[×]ボタン.Enabled = False は可能?

済みません,質問が二つあります。 1.メインフォームから,BorderStyle = 1 のダイアログフォームを Modeless で開くのですが,このフォームを右上の[×]ボタンで閉じさせたくありません。[×]ボタンをクリックしても凹まないようにし(Disabled にし),さらに表示も淡色にする方法があれば,教えていただきたく存じます。 2.テキストボックスに入力された文字列が,ファイル名として有効かどうかを簡単に判定する方法はありますか? つまり,ファイル名に「\/:,…」などが使われていたら NG,しかしパス名で使われている分には OK といった判定が簡単にできるのでしょうか? どうかよろしくお願いいたします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

こんにちはmaruru01です。 1.について 単に[×]で閉じないようにするなら、FormのUnLoadイベントでCancelをTrueにしてやればよいと思います。 2.について サンプルを作ってみました。ついでにファイル名が存在するかどうかのチェックもつけました。 No.3の方が言っているように、Open For InputまたはOutputでファイルを開いてみて、エラー値で判断します。 pathNameにファイル名(フルパス)を入れて、今回の質問では、-1が返ったら、ファイル名としては無効(不正なファイル名)ということになります。 参考になれば幸いです。 では。 'ファイルの存在チェック及び、不正ファイル名チェック Public Function NGfileName(ByVal pathName As String) As Integer   Dim Num As Integer   NGfileName = 0   Err.Number = 0   On Error Resume Next   'inputモードでファイルの存在チェック   Num = FreeFile   Open pathName For Input As #Num   If Err.Number = 0 Then     NGfileName = 1 'ファイルが存在する   End If   Close #Num   If NGfileName = 1 Then Exit Function   Err.Clear   'outputモードで不正ファイル名チェック   Num = FreeFile   Open pathName For Output As #Num   If Err.Number <> 0 Then     NGfileName = -1 'ファイル名が不正   End If   Close #Num   If NGfileName = 0 Then Kill pathName   Err.Clear End Function

38endoh
質問者

お礼

この度は,ご回答ありがとうございました。 > 参考になれば幸いです。 参考どころか,このまま使えます。これで2.の問題も解決いたしました。本当にありがとうございます。これからも,どうかよろしくお願いいたします。

その他の回答 (3)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

1. Goo(gle)等でサンプルがすぐ見つかります。 検索キー = "VB 閉じる ボタン 無効" 2. Open for input を実行して、エラー番号で判断するとか

38endoh
質問者

お礼

ご回答ありがとうございます。検索エンジンで直に検索するなんて,考えても見ませんでした。それにしても,非常にたくさんヒットするんですね。驚きました。 http://homepage1.nifty.com/Wan/vbtips/vbt_contents.htm 1.については,こちらの URL にあるサンプルプログラムが大変役に立ち,1.については解決いたしました。 この度はありがとうございました。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

質問内容の種類が全く別です。 質問はそれぞれ別スレッドにしましょう。 とりあえず1番の質問だけど、フォームのControlBox=Falseにするのじゃダメ? 押しても反応しない閉じるボタンなら、表示しなければいいような気がするけど

38endoh
質問者

お礼

ご回答ありがとうございます。いつもお世話になり,ありがとうございます。 > 質問内容の種類が全く別です。 > 質問はそれぞれ別スレッドにしましょう。 すみません。おっしゃるとおりです。これからは気を付けます。 これからもよろしくお願いします。

  • iwaz
  • ベストアンサー率57% (8/14)
回答No.1

こんにちは。 まずは 1.ですが、フォームの ControlBox プロパティを使用すれば簡単に×ボタ ンを非表示にすることはできます。但し、他の最大化、最小化ボタンも消えてしま いますが... 2.ですがちょっとサンプルを作ってみました。 これは Asc関数で文字コードをチェックして英数字のみ値を戻します。 (ファイル名の場合は、"-"や"_"とかはOKだと思うので条件に入れ てあります。ASCIIコードで 45,95) その他に条件追加があればSelect Case文に条件を追加してあげれば いいと思います。(詳しくはAsciiコード表を参照してみて下さい。) Function is_chrchk(inchr As String) As String ' 英数字以外のチェック ' 英数字の場合値をそのまま返す ' それ以外の記号は値を返さない Select Case Asc(inchr) Case 45, 95 is_chrchk = inchr Case 1 To 47 'BAD is_chrchk = "" Case 48 To 57 'GOOD is_chrchk = inchr Case 58 To 64 'BAD is_chrchk = "" Case 65 To 90 'GOOD is_chrchk = inchr Case 91 To 96 'BAD is_chrchk = "" Case 97 To 122 'GOOD is_chrchk = inchr Case 123 To 125 'BAD is_chrchk = "" Case Else 'BAD is_chrchk = "" End Select End Function Private Sub Command1_Click() 'Text1に入力した文字から英数字以外の文字を取り除き 'その結果をLabel1に転記する Dim in_filenm As String, out_filenm As String Dim temp As String in_filenm = Text1.Text out_filenm = "" If Len(in_filenm) = 0 Then MsgBox "入力がありません。", 48 Exit Sub End If For i = 1 To Len(in_filenm) temp = is_chrchk(Mid(in_filenm, i, 1)) If Len(temp) > 0 Then out_filenm = out_filenm & temp End If Next i Label1.Caption = out_filenm End Sub ご希望どおりではなかったかも知れませんが、 参考になればと思います。 がんばってみて下さい。

38endoh
質問者

お礼

早速のご回答,大変ありがとうございました。ソースまで考えていただき,本当にありがとうございます。 条件分岐といえば,私は今まで,ほとんど If 文しか使ったことがありませんでしたが,Select Case って便利そうですね。範囲指定に To やカンマが使えるとは知りませんでした。勉強になりました。

関連するQ&A

  • フィールドを有効(enabled?)にする方法?

    こんにちは,よろしくお願いします。 JavaScriptで(submitボタン)フィールドをdisabledにするには, document.getElementById("Submit").disabled ="disabled"; とすればできますが, 逆に,デフォルトでdisabledにしておいて,入力状況によってenabled?(またはnot disabled?)にする方法ってあるのでしょうか? もちろん,フォームにonsubmitイベントなどを設定しておいて,その際にすべてのフィールドの入力値を調べて,入力が不十分であれば,falseを返すという方法はあると思うのですが…。 思い付きみたいな質問で申し訳ありませんが,よろしくお願いします。

  • 最大化と最小化ボタン

    Win32Applicationサンプルを作っていて疑問に思ったのですが。 (1) メインウィンドウの右上の閉じる「×」は必要ですが、最小化・最大化ボタンを「なくす」方法は、どうすれば良いのでしょう。 (2) ダイアログボックスで反対に最小化・最大化ボタンを「追加する」方法は、どうすれば良いのでしょう。 まず(1)を知りたいです。 VC++超初心者レベルとお考え下さい。 宜しくお願い致します。

  • IE5の「W」ボタンを使って閲覧ページを編集したいのですが、できません

    IE5の「W」ボタンを使って閲覧ページを編集したいのですが、できません。「W」のボタンを押すと、なぜか「ダイアルアップの接続」のダイアログボックスがでてきて、オフラインのボタンを何度も何度も押してもダイアログボックスが表示されてしまいます。ようやくダイアログボックスが消えても「ファイル名、またはパスは正しくありません」というエラーメッセージがでてきて、閲覧ページを満足に編集することができません。この場合、IE5もしくはWordの欠陥なのでしょうか。ちなみにWord2000です(もしかしたら、私の操作ミスかも)。よろしくお願い申し上げます。

  • 参照ボタン

    「ファイル参照」を作成したとき、テキストボックスと参照ボタンが表示され、参照ボタンをクリックするとファイル選択ダイアログが表示されて選択したファイル名がテキストボックスに表示されますが、あらかじめテキストボックスにファイル名が表示されるような処理はHTMLにあるのでしょうか?

    • ベストアンサー
    • HTML
  • ダイアログボックスからファイル名の取得をしたい(ACCESS97)

    コマンドボタンを押すと「ファイル名を選択」ダイアログボックスが開き、 そこで選んだファイル名がテキストボックスに表示される、という フォームをACCESS97で作成したいのですが、ダイアログボックスを表示させる ために何という関数を使えば良いのかが分かりません。 宜しくお願いいたします。

  • EXSELでユーザフォームに参照ボタン

    EXSELでユーザフォームにテキストボックスがありテキストボックスの横に参照ボタン(コマンドボタン)をおいて参照ボタンを押すと参照ファイルが開いてテキストボックスにファイル名だけを取り込む方法を教えてください。

  • C#でボタンクリックをキャンセル

    C#でボタンクリックをキャンセル こんにちは。 C#+.Netです。 ・テキストボックスとボタンを持つフォーム ・ボタンが押された時にテキストボックスの内容をチェックする。 ・OKであれば、そのままフォームを閉じる。 ・NGであればメッセージボックスを表示して、フォームは開いたまま。 というフォームを作成したいのです。 フォームはShowDialogで表示させます。 ボタンのDialogResultには、DialogResult.OKを設定してあります。 ボタンのClickイベントを使って、メッセージボックスを出すことはできたのですが、フォームを開いたままにすることができません。 あるいは、ボタンのDialogResultはNoneのままにして、イベントハンドラ内から、フォームを閉じる方法がないかと思ったのですが、それもわかりません。 どのようにすればよいのでしょうか?よろしくお願いします。

  • コマンドボタンを使用不可にしても淡色にならない

    access2003です。 コマンドボタンをEnabledで使用不可にした時に、見た目は変わらず、淡色にならないのですが ひとめで使用不可ってわかる方法はないですか? テキストボックスやコンボボックスは使用不可って言うのが一目でわかります。 それになぜかaccess2007だと、コマンドボタンを使用不可にすると、淡色になります。 2003は使用不可にしても淡色にならない設定なのでしょうか?

  • フォルダ名だけを取得するVBA

    VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

  • ウィンドウの閉じるボタンが

    はじめまして。先日インターネットをしようとしたところ、ウィンドウの右上の閉じるボタンや最小化ボタンが×や_でなく数字に文字化けしていて、今もずっと同じような状態で困っています。他のウィンドウやダイアログボックスも同じような状態です。 これを直すのにはどうすればいいのでしょうか? 使っているブラウザはIE6を使っています。

専門家に質問してみよう