プロが教える店舗&オフィスのセキュリティ対策術

済みません,質問が二つあります。

1.メインフォームから,BorderStyle = 1 のダイアログフォームを Modeless で開くのですが,このフォームを右上の[×]ボタンで閉じさせたくありません。[×]ボタンをクリックしても凹まないようにし(Disabled にし),さらに表示も淡色にする方法があれば,教えていただきたく存じます。

2.テキストボックスに入力された文字列が,ファイル名として有効かどうかを簡単に判定する方法はありますか? つまり,ファイル名に「\/:,…」などが使われていたら NG,しかしパス名で使われている分には OK といった判定が簡単にできるのでしょうか?

どうかよろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

この度は,ご回答ありがとうございました。

> 参考になれば幸いです。

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

お礼日時:2001/12/08 00:29

1.


Goo(gle)等でサンプルがすぐ見つかります。
検索キー = "VB 閉じる ボタン 無効"

2.
Open for input を実行して、エラー番号で判断するとか
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。検索エンジンで直に検索するなんて,考えても見ませんでした。それにしても,非常にたくさんヒットするんですね。驚きました。

http://homepage1.nifty.com/Wan/vbtips/vbt_conten …

1.については,こちらの URL にあるサンプルプログラムが大変役に立ち,1.については解決いたしました。

この度はありがとうございました。

お礼日時:2001/12/08 00:25

質問内容の種類が全く別です。


質問はそれぞれ別スレッドにしましょう。

とりあえず1番の質問だけど、フォームのControlBox=Falseにするのじゃダメ?
押しても反応しない閉じるボタンなら、表示しなければいいような気がするけど
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。いつもお世話になり,ありがとうございます。

> 質問内容の種類が全く別です。
> 質問はそれぞれ別スレッドにしましょう。

すみません。おっしゃるとおりです。これからは気を付けます。
これからもよろしくお願いします。

お礼日時:2001/12/08 00:21

こんにちは。



まずは 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

ご希望どおりではなかったかも知れませんが、
参考になればと思います。
がんばってみて下さい。
    • good
    • 0
この回答へのお礼

早速のご回答,大変ありがとうございました。ソースまで考えていただき,本当にありがとうございます。

条件分岐といえば,私は今まで,ほとんど If 文しか使ったことがありませんでしたが,Select Case って便利そうですね。範囲指定に To やカンマが使えるとは知りませんでした。勉強になりました。

お礼日時:2001/12/08 00:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!