C#でノベルゲーム的なものを作っているのですが、文字の表示で詰まりました。
Returnキーを押すと、DrawString
で文字を表示するようにしてみたいのですが、メンバ変数にOnPaint
のe.Graphics
を代入して、OnKeyDown
イベント内でg.DrawString
を呼び出すとエラーになります。なぜなのでしょうか?
解決方法がありましたら教えてください。
宜しくお願いします。
C#
1using System; 2using System.Windows.Forms; 3using System.Drawing; 4 5namespace ConsoleApp8 6{ 7 class Program : Form 8 { 9 static void Main() 10 { 11 Application.Run(new Form1()); 12 } 13 } 14 15 class Form1 : Program 16 { 17 Button myButton1 = new Button(); 18 Label myLabel1 = new Label(); 19 int counter = 0; 20 Graphics g; 21 Rectangle rect = new Rectangle(0, 0, 960, 540); 22 23 void drawNovelString(string str) 24 { 25 g.DrawString( 26 str, 27 new Font("メイリオ", 12), 28 new SolidBrush(Color.White), 29 rect 30 ); 31 } 32 33 protected override void OnPaint(PaintEventArgs e) 34 { 35 g = e.Graphics; 36 37 g.DrawImage( 38 new Bitmap(@"c:\users\[ユーザー名]\documents\visual studio 2017\Projects\ConsoleApp8\ConsoleApp8\bg.png"), 39 new Point(0, 0) 40 ); 41 g.FillRectangle( 42 new SolidBrush(Color.FromArgb(128, Color.Black)), 43 rect 44 ); 45 } 46 47 protected override void OnKeyDown(KeyEventArgs e) 48 { 49 if (e.KeyCode == Keys.Return) 50 { 51 drawNovelString("小田原から静岡へ去つて、そこで雛妓のお光とたつた二人だけで小さな芸妓屋を始めたといふ話のお蝶を訪ねよう――\nさう思ふことゝ、米国ボストンのFに、最近の自分の消息を知らせなければならないこと――。"); 52 } 53 } 54 55 public Form1() 56 { 57 Width = 960; 58 Height = 540; 59 MaximumSize = Size; 60 MinimumSize = Size; 61 Text = @"「悪」の同意語 / 牧野信一"; 62 } 63 } 64} 65
エラー
C#
1 void drawNovelString(string str) 2 { 3 g.DrawString( 4 str, 5 new Font("メイリオ", 12), 6 new SolidBrush(Color.White), 7 rect 8 ); 9 }
内のg.DrawString
()で下記エラーになります。
System.ArgumentException: '使用されたパラメーターが有効ではありません。'
例外の意味はわかるのですが、なんでだめなのかはわかりません。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/20 13:00