VB2008で開発したアプリの不可解な現象

このQ&Aのポイント
  • 2年前にVB6からの移行が終り、アプリとして100ヶ所位に配布していますが、今回初めて解決できない現象が発生しました。
  • 他の配布先では問題は無く稼動しています。納入先は遠方なので電話とメールでの対応しかできなくて、お客様のパソコン操作レベルは電話でCopy&Pasteができるレベルです。functionキーは使えません。
  • 開発環境はVB2008 .NET FrameWork 3.5.1であり、お客様のパソコンはWindows7でXP,Vistaからのアップグレードではありません。
回答を見る
  • ベストアンサー

VB2008で開発したアプリの不可解な現象

2年前にVB6からの移行が終りアプリとして100ヶ所位に 配布していますが今回初めて解決できない現象が発生しました。 他の配布先では問題は無く稼動しています。 納入先は遠方なので電話とメールでの対応しかできなくて お客様のパソコン操作レベルは電話でCopy&Pasteができるレベルです。 functionキーは使えません。 ※開発環境 VB2008 .NET FrameWork 3.5.1  お客様のパソコンはWindows7でXP,Vistaからのアップグレードではない 下記の2点のアドバイスよろしくお願いいたします。 [No1] 塗り潰し印刷ができない。 エラーにはなりません。 [No2] NET FrameWorkのエラーとなります。 詳細なエラーメッセージは不明です。 Text書き出しはやめて他の方法で対処しましたが なぜエラーになるのか経験のある方宜しくお願いします。 [No1]-------------------------------------------------------------------------- Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim drawbrushWhiteSmoke As New SolidBrush(Color.WhiteSmoke) With e.Graphics .FillRectangle(drawbrushWhiteSmoke, 15 , 80, 180, 6) '塗り潰し End With [No2]-------------------------------------------------------------------------- Private Sub XXXXX() Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") Dim File_Name As String = フォルダー名 & "Data\Prev.txt" System.IO.File.WriteAllText(File_Name, Out_MitumoriNo, enc)

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

  • ベストアンサー
  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.3

推測ですが、 1)プリンタの中間色処理と相性が良くない。 プリンタの機種によって相性が変わりますが、プリンタの印刷設定で相性が変化する場合があるようです。 2)OSが日本語版ではないか、日本語以外の言語設定になっているのかも知れません。 この文字コード処理は.NETに実装されているわけではなくOSに処理を委ねているだけだとのことですから、Shift JISをOSがサポートしていない可能性が考えられます。

can62220
質問者

お礼

お礼が遅くなり申し訳ございません。 [No1]の塗り潰し印刷ができない件は教えて頂いたプリンタとの 相性が良くないのが原因でした。 Color.WhiteSmokeをColor.FromArgb(225,225,225)で解決しました。 お世話になりました。 [No2]のText書き出しの件はパソコンは日本製でした。 納得できないのですが他の方法で正常に処理できているので良しとしました

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.2

[No1]についてはわかりませんけど[No2]は起こりえるExceptionから原因を推測されるとよろしいのではないでしょうか? 本当はエラーメッセージが分かればいいのでしょうけど。 https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.writealltext?view=netframework-3.5

can62220
質問者

お礼

お礼が遅くなり申し訳ございません。 これからもよろしくお願いいたします。

回答No.1

> 塗り潰し印刷ができない。 画面や印刷プレビューはOKだけど、プリンタに送った時だけNGとかでしょうか? 他の文字や図形は印刷できるけど、塗りつぶし部分だけがおかしい? プリンタで印刷を行う方法は大きく2種類あります。 1)文字を印刷する座標や文字コード、矩形を描画する座標などをプリンタに送り、プリンタで描画、印刷してもらう方式。   プリンタへのデータ転送量が少なく、印刷速度が速いのが特徴。   プリンタが持っていないフォントが別のフォントに置き換わったり、塗り潰しの模様のパターンが違ったりって事があり得ます。 2)文字や画像をパソコン側で描画して、プリンタに画像を送る方式。   送信するデータが大きいです。   細い線とか文字がジャギジャギになったりって事があります。 1)の設定で、プリンタのドライバに塗りつぶしの命令がうまく伝わらないとか。 プログラムでどうこうって話でもないので、根本的なやり方変えてみて様子見るとか。 プリンタの印刷の設定で、「高速印刷」になってるなら「きれいに印刷」とか、「ビットマップを送信」とかの設定が無いか確認して設定変更してみるとか。 -- > [No2] > NET FrameWorkのエラーとなります。 処理が不明瞭ですが、フォルダー名が日本語とか空白文字を含んでる場所だったら?とかは気になるかも。 別の、英名の短いフォルダーを指定してみては。

can62220
質問者

お礼

早速の回答ありがとうございます。 1)請求書印刷で使っているので文字・罫線は多用していますが  正常に印刷しています。  塗り潰しの件はもう一度プレビューとプリンター設定を確認します 2)のText出力は実際のフォルダーは日本語ではなく   "C:\test\" & "Data\Prev.txt"です。  単純に数字12桁書き出すだけなのに???  

関連するQ&A

  • VB.netで印刷

    プリンターにA4サイズより5mm内側に四角形を書いて印刷したいのですが ずれてしまいます。おそらく余白の設定ではないかとおもうのですが 用紙を横向き、余白0,指定はどう指定すればよいでしょうか あるいは、参考になるサイトをお教えください。 Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim f As New Font("MS 明朝", 64, FontStyle.Bold) e.Graphics.PageUnit = GraphicsUnit.Millimeter e.Graphics.DrawRectangle(New Pen(Color.Red), 5, 5, 287, 200) End Sub

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • VB2010DataGridView複数ページ印刷

    VB2010のDataGridViewで複数ページの印刷を試みています。 改ページに悩んでいます。「e.HasMorePages=True」で改ページは可能ですが、1ページ目も2ページ目も同じ内容が印刷されます。 1ページに30行を印刷する予定ですので、2ページ目には31行目から印刷をしたいのです。 現在、いろいろ参考にしまして、コーディングは進んでいますが、30行の指定がページ目いっぱいまで印刷される点と、2ページ目以降の印刷ができない点に悩んでいます。 書き上げたコードを記述しますので、ご存知の方が居られましたら、ご教授ください。 Dim reader As IO.StreamReader Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PrintPreviewDialog1.ShowDialog() PrintPreviewDialog1.Document = PrintDocument1 'file() ' 印刷処理を実行 'PrintDocument1.Print() 'PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow) 'PrintDocumentオブジェクトの作成 Dim pd As New System.Drawing.Printing.PrintDocument 'PrintPageイベントハンドラの追加 AddHandler pd.PrintPage, AddressOf pd_PrintPage 'PrintDialogクラスの作成 Dim pdlg As New PrintDialog 'PrintDocumentを指定 pdlg.Document = pd '印刷の選択ダイアログを表示する If pdlg.ShowDialog() = DialogResult.OK Then 'OKがクリックされた時は印刷する pd.Print() End If End Sub Dim page As Integer = 0 '現在のページ Private Const MaxLine As Integer = 30 '1ページ30行 Private Sub pd_PrintPage(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) page += 1 'グラフィックの定義 Dim g As Graphics = e.Graphics '総行数をallrowとする Dim allrow As Integer = DataGridView1.Rows.Count - 1 '文字列を描く 'g.DrawString(DataGridView1(0, 0).Value, _ ' New Font("MS Pゴシック", 9), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top) Dim X As Integer Dim Y As Integer Y = e.MarginBounds.Top For i As Integer = 0 To DataGridView1.Rows.Count - 1 X = e.MarginBounds.Left For j As Integer = 0 To DataGridView1.Columns.Count - 1 Dim s As String If DataGridView1(j, i).Value Is Nothing Then s = "" Else s = DataGridView1(j, i).Value End If g.DrawString(s, New Font("MS Pゴシック", 9), Brushes.Black, X, Y) 'g.DrawString(DataGridView1(j, i).Value.ToString, _ ' New Font("MS Pゴシック", 9), Brushes.Black, X, Y) X += DataGridView1.Columns(j).Width Next j Y += DataGridView1.Rows(i).Height Next i '現在のページが総ページ数より少ない場合は、次ページへ If page < (allrow \ MaxLine + 1) Then e.HasMorePages = True Else 'このページで終了 e.HasMorePages = False End If End Sub

  • vb2005でUDP受信時にフォームが表示されない

    はじめまして VB2005でUDPのメッセージを受信してForm上のLabelに受信内容を表示させるサンプルプログラムを作成したのですが、「デバック開始」をクリックしてもFormのウィンドウ自体が表示されません。 イミディエイトにdebug.printで受信データは表示されていますのでプログラム自体は正常に動作しているようです。 どなたかアドバイスをいただけませんでしょうか。 Public Class Form1 Dim localport As Integer = 1111 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 ' バインド Dim udp As New System.Net.Sockets.UdpClient(localport) ' 受信 Dim remoteEP As System.Net.IPEndPoint = Nothing Debug.Print("受信開始") Do My.Application.DoEvents() Dim rcvBytes As Byte() = udp.Receive(remoteEP) Dim rcvMsg As String = enc.GetString(rcvBytes) My.Application.DoEvents() Debug.Print("受信メッセージ:" & rcvMsg) Label1.Text = rcvMsg Loop End Sub End Class

  • VB.NETのSendMessageを教えてください

    SendMessageというAPIを試しているのですが、まず試しに Button2.Text = "test" と同じ結果をSendMessageでやってみたいのですが 下のようにしてみたのですが、変更になりませんでした。 どのようにすれば良いかご教授頂ければ幸いです。よろしくお願致します。 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer Private Const WM_SETTEXT As Integer = &HC Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim h As Integer h = Me.Button2.Handle.ToInt32 SendMessage(h, WM_SETTEXT, 0&, "test") End Sub VB.NET2003 FrameWork1.1 WindowsXP-PRO(SP2) です。

  • VBでGetTickCountを使う

    VB初心者です。 さっそくですが、VBで、msecのデータを扱うのに”GetTickCount”を使っていますが、精度はともかくまれにありえない大きな数値が帰ってきます。プログラムと実行結果は下記の通りですが、何が原因でしょうか? OSは、WindowsXPです。 アドバイスよろしくお願いします。 <プログラム> Dim BeforeTime As Long Dim NowTime As Long Dim n As Integer 'システムを立ち上げてからの経過時間(単位:ミリ秒)を取得 Private Declare Function GetTickCount Lib "Kernel32" () As Long '実行処理 Private Sub buttonRun_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles buttonRun.Click For n = 1 To 20 TimeCheck() Next End Sub 'データ取得&表示 Private Sub TimeCheck() BeforeTime = GetTickCount TextBox1.Text = TextBox1.Text & n & " : " & BeforeTime & " " & BeforeTime - NowTime & ControlChars.CrLf NowTime = BeforeTime End Sub <実行結果> No 現在の取得値  → 前回との差 ------------------------------------ 0 : 225661890149886 → 初回取得値 1 : 225661890149886 → 0 2 : 225661890149886 → 0 3 : 225661890149886 → 0 4 : 225661890149886 → 0 5 : 225661890149886 → 0 6 : 225661890149886 → 0 7 : 225661890149886 → 0 8 : 225661890149886 → 0 9 : 225661890149886 → 0 10 : 225661890149886 → 0 11 : 225666185117197 → 4294967311 12 : 225666185117197 → 0 13 : 225666185117197 → 0 14 : 225666185117197 → 0 15 : 225666185117197 → 0 16 : 225666185117197 → 0 17 : 225666185117197 → 0 18 : 225666185117197 → 0 19 : 225666185117197 → 0 20 : 225666185117213 → 16 以上

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • 【VB2005】です。txtファイルを配列に読み込もうとしています。

    45*45のtxtデータを配列に読み込もうとしているのですが、エラーが出ます。なぜでしょうか? 宜しくお願いします。 【VB2005を使っています。】 Private Sub OpenButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenButton1.Click Dim selectButton As DialogResult Dim filename As String Dim i, j As Integer \'開く ダイアログの表示 selectButton = DBOpenDialog1.ShowDialog() filename = DBOpenDialog1.FileName If selectButton = Windows.Forms.DialogResult.OK Then Dim sr As System.IO.StreamReader = Nothing Dim readFields() As String i = 0 sr = New System.IO.StreamReader(filename, System.Text.Encoding.Default) Do Until sr.EndOfStream readFields = sr.ReadLine().Split(\",\") For j = 0 To 44 Tests1(i, j) = readFields(j) Next j i += 1 Loop sr.Close() End If End Sub

  • VB2010で動作しない

    vb2010でWindowsアプリを作っている初心者です。 ある文字列を与えたテキストファイルを生成しようと思い、以下のコードを書きました。 VB2010の環境で実行すると、テキストファイルはできないし、何も動作しません。 同様のことを別のPCのVB2005(VS2005)で実行するときちんとファイルが生成しました。 VB2010ではエラーは出ないのですが、動作しません。 何かの参照が悪いのでしょうか。 「sw」のところにカーソルを当てると貼付の画像の内容でした。 「書き込み専用プロパティはサポートされていません。」 と表示されていますが、これと関係あるのでしょうか。 この言葉の意味がよくわかりません。 よろしくご指導下さい。 以下コード ↓ Imports System Imports System.IO Public Class formExportData 'プリント ボタン クリック Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click Dim sw As StreamWriter sw = New IO.StreamWriter("C:\Users\Taro\Desktop¥Hoge.txt", False, System.Text.Encoding.Default) sw.WriteLine("テストしています。") sw.WriteLine("この文字がプリントされる。") sw.Close() End Sub

  • VB.NET フォーム上に描いたグラフィックのクリア方法

    最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。 VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか? ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。 例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか? 宜しくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Dim grph As System.Drawing.Graphics   grph = Me.CreateGraphics   grph.DrawLine(Pens.Red, 50, 25, 200, 150)   ClearScreen(e) End Sub Public Sub ClearScreen(ByVal e As PaintEventArgs)   Dim BGcolor As Color   BGcolor = Color.FromArgb(0, 0, 0)   e.Graphics.Clear(BGcolor) '背景色 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   ClearScreen(e) End Sub

専門家に質問してみよう