Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
テキストファイルの内容を1行ずつ改行して表示できるかについて
タグの編集...
投稿者
東
 (高校生)   投稿日時
2016/8/19 10:48:23
ボタンをクリックしたらテキストファイルの内容を1行ずつ、なおかつ改行して表示するということをしたいのですが、どうすればできるでしょうか。
投稿者
(削除されました)
 ()   投稿日時
2016/8/19 11:50:05
(削除されました)
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2016/8/19 12:15:39
用途が良く分かりませんが、
TextBox か RichTextBox に読み込んで
スクロールバーでは駄目なのでしょうか。
> 改行して表示するという
読み込むのは、ボタンを押すごとに一行ずつなのですね。
そして、その一行のデータを改行して表示するということは、
折り返し表示を行いたい……ということでしょうか。
だとしたら、Label を AutoSize = False で貼っておけば
自動的に折り返し表示になりますよ。
> どうすればできるでしょうか。
やり方はいろいろあると思いますが、一例として:
Public
Class
Form1
Private
txtFile
As
String
Private
nextLine
As
IEnumerator(
Of
String
) =
Nothing
Private
Sub
Form1_Load(sender
As
Object
, e
As
EventArgs)
Handles
MyBase
.Load
OpenFileDialog1.Filter =
"Text Files (.txt)|*.txt|All Files (*.*)|*.*"
OpenFileDialog1.FilterIndex = 1
Label1.Text =
""
'ここに一行ずつ表示
Button1.Text =
"ファイル選択"
Button2.Text =
"次の行"
Button2.Enabled =
False
End
Sub
Private
Sub
Button1_Click(sender
As
Object
, e
As
EventArgs)
Handles
Button1.Click
If
OpenFileDialog1.ShowDialog() = DialogResult.Cancel
Then
Return
End
If
Button2.Enabled =
False
If
nextLine
IsNot
Nothing
Then
nextLine.Dispose()
nextLine =
Nothing
End
If
Try
txtFile = OpenFileDialog1.FileName
nextLine = System.IO.File.ReadLines(txtFile, System.Text.Encoding.GetEncoding(
"Shift_JIS"
))
If
nextLine.MoveNext()
Then
Button2.Enabled =
True
Button2.PerformClick()
Else
Label1.Text =
""
MessageBox.Show(
"ファイルが空です"
,
"Info"
, _
MessageBoxButtons.OK, MessageBoxIcon.Information)
End
If
Catch
ex
As
System.IO.IOException
nextLine =
Nothing
Dim
er =
"ファイル["
& txtFile &
"]を読み込めません。"
& vbCrLf & ex.ToString()
MessageBox.Show(er,
"Error"
, _
MessageBoxButtons.OK, MessageBoxIcon.
Error
)
End
Try
End
Sub
Private
Sub
Button2_Click(sender
As
Object
, e
As
EventArgs)
Handles
Button2.Click
If
nextLine
Is
Nothing
Then
MessageBox.Show(
"ファイルが読み込まれていません。"
,
"Warning"
, _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return
End
If
Label1.Text = nextLine.Current
Button2.Enabled = nextLine.MoveNext
End
Sub
End
Class
投稿者
東
 (高校生)   投稿日時
2016/8/19 12:46:56
説明が足りませんでした。
表示したいのはラベルにではなく、ピクチャーボックスにです。
投稿者
東
 (社会人)   投稿日時
2016/8/19 12:52:28
テキストボックスで改行したいのは、テキストボックスに文字を打つと、一番右まで行くと下の行に行きますが、表示をしても下の行に行った文字は、下に表示されず、右側に行ってしまう現象があります。
それを直したいので、テキストボックスで改行したいのです。
ピクチャーボックスに表示するときに、テキストボックスに入っているテキストファイルの内容を改行できればそれでもいいのですが…
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2016/8/19 14:31:38
> 表示したいのはラベルにではなく、ピクチャーボックスにです。
そこは是非、自分でトライしてみてください。
ファイルからの読み込みサンプルは提示していますし、
ピクチャーボックスへの表示は、今まで何度も行っていましたよね。
> テキストボックスで改行したいのは
「テキストボックスで改行したい」という話は初耳なんですが…。(^^;
> 表示をしても下の行に行った文字は、下に表示されず、右側に行ってしまう現象があります。
ということは、TextBox の MultiLine を True にしているのですよね。
> テキストボックスに文字を打つと、一番右まで行くと下の行に行きますが、
TextBox の WordWrap が True だと、右端で折り返されます。
> それを直したいので
TextBox の WordWrap が False だと、そのまま折り返されずに続きます。
この時、ScrollBars プロパティの設定によっては、水平スクロールバーが表示されることもあります。
逆に、任意の位置で改行したいのであれば、
下記のリスト5のように、改行させたい場所に
vbCrLf あるいは vbNewLine を挿入すれば OK です。
http://homepage1.nifty.com/rucio/main/dotnet/ClassLibrary/L006_System.Windows.Forms.TextBox.htm
vbCrLf は、先のサンプルでもメッセージボックスの改行に使っていますね。
> テキストボックスに入っているテキストファイルの内容を改行できればそれでもいいのですが…
TextBox でワードラップ(自動折り返し)されている場所に
改行文字を挿入したいのであれば、下記のようにします。
①ソリューション エクスプローラーでプロジェクトを
右クリックし、[追加]-[モジュール]を選択します。
②追加する項目が「モジュール」になっていることを確認したら、
ファイル名を「TextBoxExtensions.vb」にして追加します。
③追加された Module を、下記のコードで置き換えます。
Module
TextBoxExtensions
''' <summary>
''' 複数行テキストボックスの折り返し位置に、ソフト改行を挿入します
''' </summary>
<System.Runtime.CompilerServices.Extension()>
Public
Sub
InsertSoftLineBreak(
ByVal
txt
As
TextBox)
SendMessageW(txt.Handle, EM_FMTLINES,
New
IntPtr(1), IntPtr.Zero)
End
Sub
''' <summary>
''' 複数行テキストボックスからソフト改行を削除します
''' </summary>
<System.Runtime.CompilerServices.Extension()>
Public
Sub
RemoveSoftLineBreak(
ByVal
txt
As
TextBox)
SendMessageW(txt.Handle, EM_FMTLINES, IntPtr.Zero, IntPtr.Zero)
txt.Refresh()
End
Sub
Private
Declare
Unicode
Function
SendMessageW
Lib
"user32"
_
(
ByVal
hWnd
As
IntPtr,
ByVal
wMsg
As
Integer
, _
ByVal
wParam
As
IntPtr,
ByVal
lParam
As
IntPtr)
As
IntPtr
Private
Const
EM_FMTLINES
As
Integer
= &HC8
End
Module
④MultiLine と WordWrap の両方が True な TextBox に対して
『TextBox1.InsertSoftLineBreak()』を実行してみてください。
現在の折り返し部分に「ソフト改行」が挿入されます。
本当の改行箇所である「ハード改行」は『vbCr & vbLf』の
ままですが、折り返し位置には『vbCr & vbCr & vbLf』が
ソフト改行として挿入されるようになっています。
また、『TextBox1.RemoveSoftLineBreak()』を実行すれば、
挿入済みのソフト改行がまとめて削除されます。