ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

VisualBasic2010でリッチテキストボックスにテキストファイルの内容を
StreamReaderで読み込んでいます。
その際、テキストの中身を基本とし変数で変換したものをリッチテキストに出力しています。
リッチテキストに表示されたもの(元のテキストファイルではダメ)を
印刷したいのですが、方法がわかりません。
ご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

文字の印刷サンプルなんてたくさん転がってると思いますが。


ただ、リッチテキストを使用している理由が質問文内にないため、リッチテキストボックスでフォントや色を自由にアレやコレや変えまくった結果を見た目そのままに印刷されることを期待しているのか、単にプレーンな文字列が印刷されることを期待しているのかは不明。
http://dobon.net/vb/dotnet/graphics/printtext.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

QRichTextBoxで指定行の色を自動で変更・・。

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。

最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm
を参考にしてみたのですが、やはり良く分かりません・・。
申し訳ありませんが、何か助言頂けると嬉しいです。
VB.NETです。


Do
RichTextBox1.SelectionStart = text.IndexOf("'")
RichTextBox1.SelectionLength = text.IndexOf(vbCrLf) - text.IndexOf("'")
RichTextBox1.SelectionColor = System.Drawing.Color.LightGray
Loop While text.IndexOf("'") <= -1

変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。

最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm
を参考にしてみたのですが、やはり良く分かりません・・。
申し訳ありませんが、何か助言頂けると嬉しいです。
VB.NETで...続きを読む

Aベストアンサー

こんな事をしたいのですか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim text As String = _
    "あいうえお" & vbCrLf & _
    "'かきくけこ" & vbCrLf & _
    "さしすせそ" & vbCrLf & _
    "たちつてと" & vbCrLf & _
    "'なにぬねの" & vbCrLf & _
    "はひふへほ" & vbCrLf & _
    "まみむめも" & vbCrLf & _
    "'やゆよ" & vbCrLf & _
    "らりるれろ" & vbCrLf & _
    "わをん"

  Me.RichTextBox1.Text = text

  Dim rtb As RichTextBox = Me.RichTextBox1
  Dim intS As Integer = 0
  Dim intE As Integer = 0

  While True
    intS = rtb.Text.IndexOf("'"c, intS)
    If intS = -1 Then
      Exit While
    Else
      intE = rtb.Text.IndexOf(Chr(10), intS)
      If intE = -1 Then
        Exit While
      Else
        rtb.SelectionStart = intS
        rtb.SelectionLength = intE - intS
        rtb.SelectionColor = System.Drawing.Color.LightGray
        intS = intE
      End If
    End If
  End While

End Sub

IndexOfではvbCrLfは検索できませんね、何ででしょう
オブジェクトブラウザで見ると「Chr(10) & Chr(13)」のString型なのに...

RTFを調査してみると幸せになれるかも

こんな事をしたいのですか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim text As String = _
    "あいうえお" & vbCrLf & _
    "'かきくけこ" & vbCrLf & _
    "さしすせそ" & vbCrLf & _
    "たちつてと" & vbCrLf & _
    "'なにぬねの" & vbCrLf & _
    "はひふへほ" & vbCrLf & _
    "まみむめも" & vbCrLf & _
    "'やゆよ" & vbCrLf & _
    "らりるれろ" & vbCrLf...続きを読む

Qエクセルにテキストボックスを貼り付けて印刷すると、表示どおり印刷できない

エクセルにテキストボックスを貼り付けて印刷すると、最後の行が切れたり右端の部分が勝手に改行したりしてうまく印刷できません。たぶん私の操作がだめなんでしょうが。表示はきちんとできているのに、印刷するとそうなるのでプレビューを見ていちいちなおしています。ストレスがたまります。何をどう直したらよいのでしょうか。

Aベストアンサー

#1 です。

残念ながらこれ以上の策はないと思います。
何せ Windows の中で異なる 2 つの描画機能が働いていることによる不整合ですので、これは Windows そのものが仕組みを変えない限り解決しません。
他方、Apple 社の Macintosh では、印刷に関しては OS の開発段階から WYSWYG(What You See is What You Get = 画面で見ているものが、そのまま成果物(印刷物)になる)の考え方が貫かれており、私の知る限りでは Windows 上の印刷結果よりはるかにまともなものが得られます。

QVBの画面サイズについて

VBなど他のアプリでもそうだと思うのですが、「Width」「Height」のサイズは
ピクセル単位なのでしょうか?ミリメートルに直すと何ピクセルなのでしょうか?

Aベストアンサー

VB6.0まではtwipという単位でしたが(Windowsなら15twipで1ピクセル、1 論理インチは 1440twip )
.netからピクセルになりました。

Windowsなら96ピクセル/インチ(2.54センチメートル)なので、
37.8ピクセル/センチメートル=567twip

Macは72dpiなのでまた別になります。

参考URL:http://www.grapac.co.jp/bureau/dc_tips/tips_dpi.html

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QDataGridViewで変更した値を反映させたい。

VB2005、SqlServer2005環境です。

デザイナ上で、DataTableをドラッグしてやると、自動的に
バインドされたDataGridViewが出てくれるので、その方法で
DataGridViewを1つ設置しました。

このDataGridViewの表の値を変えた時、それを実際のDBのテーブルにも
反映させたいなと思ってます。
これを実現するための方法を教えていただけないでしょうか?
バインドされているので、保存できればそのまま更新されるような
イメージなのですが…その方法がわかりません。

宜しくお願いします。

Aベストアンサー

ビューからだとUpdateやDeleteなど元のテーブル対する操作は自動生成されないようです

フォームに張り付いているデータセットにクエリを追加して
テーブルを操作できるようにします
表示されているテーブルアダプタをアクティブにして データ > 追加 > Queryを実行
SQLステートメントを使用するにチェック で次へ
UPDATE で次へ
ここで クエリビルダ もしくは 直接SQLを編集し『完了』をクリック

フォームに更新用ボタンを配置
そのクリックイベントに

dim row as DataRow
for each row in DS.DaTable.Rows
  if row.RowState = DRowState.Modified then
    TableAdapter.UpdateQuery( Row("Name"), Row("ID") )
  end if
next
といった具合で更新を掛けます
# 変数名などは適宜修正してください
# DS.DaTable.Rows、TableAdapter、Row("Name"), Row("ID")などです

ビューからだとUpdateやDeleteなど元のテーブル対する操作は自動生成されないようです

フォームに張り付いているデータセットにクエリを追加して
テーブルを操作できるようにします
表示されているテーブルアダプタをアクティブにして データ > 追加 > Queryを実行
SQLステートメントを使用するにチェック で次へ
UPDATE で次へ
ここで クエリビルダ もしくは 直接SQLを編集し『完了』をクリック

フォームに更新用ボタンを配置
そのクリックイベントに

dim row as DataRow
for each row in DS.Da...続きを読む

Qフォームの存在をチェックする方法

みなさんこんばんわです。よろしくお願いします。

VB.NET 2008で開発をしています。フォームについて、どうしてもわからない点がありますのでお伺いいたします。

Form1、Form2があるとします。

Form1.Visible = False

とすれば、Form1のインスタンスは残ったまま、非表示なだけです。一方、

Form1.Close()
Form1.Dispose()

とすれば、Form1は完全にメモリ上から解放されています。つまり、Form1上のコントロールから値を取得しようとするとエラーになりますよね。

つまり、上記の二つのケースをForm2から判断したいのですが、そのコードが分からないんです。Form2のコードで、Form1のインスタンスが存在するかどうか、つまり、Form1上のコントロールの値を参照することができるかどうかを知りたいんです。

具体的には、実際のイメージはForm3まであって、Form1が不可視で生きていれば、Form1上のコントロールの値を参照し、Form2が不可視で生きていれば、Form1は無視してForm2上のコントロールの値を参照するという具合です。

ちなみに、

If Form1.Visible = False Then Debug.Print("生きてます")

のコードでは、Form1のインスタンスがメモリ上にあってもなくても、不可視であれば、同じ値を返すことがわかり、役に立ちません。


ご存じの方がいらっしゃいましたら、たいへんお手数をおかけしますが、どうぞよろしくお願い申し上げます。
ありがとうございました。

みなさんこんばんわです。よろしくお願いします。

VB.NET 2008で開発をしています。フォームについて、どうしてもわからない点がありますのでお伺いいたします。

Form1、Form2があるとします。

Form1.Visible = False

とすれば、Form1のインスタンスは残ったまま、非表示なだけです。一方、

Form1.Close()
Form1.Dispose()

とすれば、Form1は完全にメモリ上から解放されています。つまり、Form1上のコントロールから値を取得しようとするとエラーになりますよね。

つまり、上記の二つのケー...続きを読む

Aベストアンサー

NameSpace Myの中の Appliaction.OpenFormsで Closeしたかどうかが分かるようですよ

Form2側のチェックイベントで
if My.Appliaction.OpenForms("Form1") isnot Nothing then
  Debug.Print("生きています")
end if
といった具合です


人気Q&Aランキング