VB.netでテキストエディタ(Vector記載申請予定)を作ろうとしています。質問は題の通りです。一応過去ログを見たら同じようなものがあったのですが、それはVB6のコードでOpenfiledialogがなかったりといろいろ違っていて初心者の私にはさっぱりでした。是非、VB.netでの上書き保存の仕方をご教授願います。また、Newというコマンドを使ってメモ帳の日付と時刻を真似しようとしたのですが、文章がすべて消えてしまいます。どうすればいいでしょうか。
ファイルの入出力より、.NETの内容がおわかりになっていないので、かなり
苦労されるとは思いますが・・・
ファイル関係は、
FileStream
StreamReader
StreamWriter
のクラスをご参照下さい。
尚、テキストエディターと言うことであれば、文字コードのエンコード・
デコード関係も必要になると思いますが・・・Encodingクラスもご参照
下さい。
以上。
それと・・・
> Newというコマンドを使ってメモ帳の日付と時刻を真似しようとした
> のですが、文章がすべて消えてしまいます。どうすればいいでしょうか。
意味が解りません。
具体的にどうしようとされたのか、また実質のコードを記載して頂ければ
対策も可能なのですが・・・
以上。
意味のわからない文章を書いてしまって申し訳ございませんでした。
コードを記述しました。日付と時刻の欄を見てください。
たとえば、テキストエディタに文章が書いてある時に日付と時刻のコマンドを実行すると、もともと書いてあった文章に上書きされて日付と時刻が表示されてしまうということです。
また、その他で効率が悪い記述などがありましたら、ご指摘願います。
'終了
Private Sub mimExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimExit.Click
Application.Exit()
End Sub
'新規作成
Private Sub mimNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimNew.Click
txtWrite.Clear()
End Sub
'開く
Private Sub mimOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimOpen.Click
'宣言
Dim d As DialogResult
Dim tempData As String
Dim readData As String
Dim i As Integer
'ダイアログを表示してファイルを選択
d = OpenFileDialog.ShowDialog()
If d = DialogResult.Cancel Then
Exit Sub
End If
'ファイルを開く
i = FreeFile()
FileOpen(i, OpenFileDialog.FileName, OpenMode.Input)
'データの読み込み
Do Until EOF(i)
tempData = LineInput(i)
readData = readData & tempData & vbNewLine
Loop
txtWrite.Text = readData
'ファイルを閉じる
FileClose(i)
End Sub
'保存
Private Sub mimSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimSave.Click
'宣言
Dim i As Integer
Dim d As DialogResult
'ダイアログを表示してファイルを選択
d = SaveFileDialog.ShowDialog()
If d = DialogResult.Cancel Then
Exit Sub
End If
'ファイルを開く
i = FreeFile()
FileOpen(i, SaveFileDialog.FileName, OpenMode.Output)
'データの書き込み
Print(i, txtWrite.Text)
'ファイルを閉じる
FileClose(i)
End Sub
'印刷情報
Private Sub mimPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimPrint.Click
'宣言
Dim d As DialogResult
'印刷ダイアログの表示
d = PrintDialog.ShowDialog()
If d = DialogResult.OK Then
'印刷を開始
PrintDocument.Print()
End If
End Sub
'印刷ルール1
Private Sub PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
'描画
e.Graphics.DrawString(txtWrite.Text, txtWrite.Font, Brushes.Black, 0, 0)
End Sub
'印刷ルール2
Private Sub frmNicelookmemo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PrintDialog.Document = PrintDocument
End Sub
'フォントダイアログの表示
Private Sub mimFont_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimFont.Click
'宣言
Dim d As DialogResult
'フォントダイアログの表示
d = FontDialog.ShowDialog
If d = DialogResult.Cancel Then
Exit Sub
End If
'フォントと色の変更
txtWrite.Font = FontDialog.Font
txtWrite.ForeColor = FontDialog.Color
End Sub
'文字数表示
Private Sub mimMojisu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimMojisu.Click
'宣言
Dim m As String
'文字数ダイアログの表示
m = txtWrite.Text
MessageBox.Show("文字数:" & Len(m) & "文字", "文字数", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
'日付と時刻
Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click
txtWrite.Text = Now
End Sub
'バックカラー(白)
Private Sub mimWhite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimWhite.Click
txtWrite.BackColor = Color.White
txtWrite.ForeColor = Color.Black
End Sub
'バックカラー(黒)
Private Sub mimBlack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimBlack.Click
txtWrite.BackColor = Color.Black
txtWrite.ForeColor = Color.White
End Sub
End Class
'日付と時刻
>Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal
>e As System.EventArgs) Handles mimDatetime.Click
> txtWrite.Text = Now
> End Sub
txtWrite.Text = Now は txtWrite.Text になにが記入されてても
日付時間だけを記入します。
txtWrite.Text に Now を追加するのは &
改行するならvbNewLineですね。
あと一息。
Take1さん。コードを下のように書き換えることで問題解決しました。
'日付と時刻
Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click
Dim t As String
t = txtWrite.Text
txtWrite.Text = t & Now
End Sub
岡田さん、参照してみました。
>ファイル関係は、
>FileStream
>StreamReader
>StreamWriter
>のクラスをご参照下さい。
>尚、テキストエディターと言うことであれば、文字コードのエンコード・
>デコード関係も必要になると思いますが・・・Encodingクラスもご参照
>下さい。
どうやら私の場合、Openfiledialogに依存してしまっているように思えます。
どちらでやるほうが、より効率がよいのでしょうか?また、現在の私のやり方でも、上書き保存できますか?ご教授ください。
p.s なにぶん初心者なものでわけのわからない発言などがあるかもしれません。
もし、そのような発言があったら是非ご指摘ください。
先に解決した部分もあろうかと思いますが、修正した部分のソースを掲載
します。
※ VB6から継承されて実際に使えるコマンドやステートメントも多数
ありますが、今後のことを考え、すべてVB.NETの方の機能を、
お使いになる方が良いと思います。
Imports System.IO
'開く
Private Sub mimOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimOpen.Click
'宣言
Dim d As DialogResult
Dim sr As StreamReader
'ダイアログを表示してファイルを選択
d = OpenFileDialog.ShowDialog()
If d = DialogResult.Cancel Then
Exit Sub
End If
'ファイルを開く
sr = New StreamReader(OpenFileDialog.FileName)
'データの読み込み
txtWrite.Text = sr.ReadToEnd
'ファイルを閉じる
sr.Close()
End Sub
'保存
Private Sub mimSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimSave.Click
'宣言
Dim i As Integer
Dim d As DialogResult
Dim sw As StreamWriter
'ダイアログを表示してファイルを選択
d = SaveFileDialog.ShowDialog()
If d = DialogResult.Cancel Then
Exit Sub
End If
'ファイルを開く
sw = New StreamWriter(SaveFileDialog.FileName)
'データの書き込み
sw.Write(txtWrite.Text)
'ファイルを閉じる
sw.Close()
End Sub
'文字数表示
Private Sub mimMojisu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimMojisu.Click
'宣言
Dim l As Long
'文字数ダイアログの表示
l = txtWrite.Text.Length
MsgBox("文字数:" & l.ToString & "文字", MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "文字数")
End Sub
'日付と時刻
Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click
txtWrite.Text = txtWrite.Text + DateTime.Now.ToShortDateString + " " + DateTime.Now.ToShortTimeString + " "
End Sub
● やはりこの中で、問題になるのが、読み込みたい、もしくは保存する
場合のテキストファイルの文字コードです。
この修正を実行して頂きますと、漢字が混ざっているテキストを読ん
だり保存したりしますと、他のソフト(メモ帳等)で開きますと、文
字部分(全角)がバケてしまっていることが解ります。
先のStreamクラス関係の部分で、ファイルを開く時、保存する時に、
文字コード体系を指定することができます。
そこは頑張ってみられては?
以上。
岡田さん、レスありがとうございます。がんばってみます。
確か、.netはmessagebox.showでMsgboxはVB6(どっちでも使えますが…)ではなかったでしょうか?
ツイート | ![]() |