質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

2回答

503閲覧

C#のOnkeyDownイベント内でのGraphics処理

kurosuke___

総合スコア217

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2017/08/17 11:58

編集2017/08/17 12:05

C#でノベルゲーム的なものを作っているのですが、文字の表示で詰まりました。

Returnキーを押すと、DrawStringで文字を表示するようにしてみたいのですが、メンバ変数にOnPainte.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: '使用されたパラメーターが有効ではありません。'

例外の意味はわかるのですが、なんでだめなのかはわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

DrawStringにDrawString(String, Font, Brush, RectangleF)はありますが、DrawString(String, Font, Brush, Rectangle)は無いようです。
最後のrectがRectangleFではないからではないでしょうか?

投稿2017/08/17 13:06

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosuke___

2017/08/20 13:00

回答ありがとうございます。試してみますね。
guest

0

ベストアンサー

Paintイベントで渡されたGraphicsは描画を完了すると破棄されるので参照を覚えておいてもあとで使用することはできません。
KeyDownイベント内で描画するにはCreateGraphicsでGraphicsを作成する必要があります。

投稿2017/08/17 13:04

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosuke___

2017/08/20 13:00

回答ありがとうございます。 破棄されてしまうのは知りませんでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問