using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace TestForm {
static class Program {
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2());
}
}
public class Form2 : Form {
PictureBox Edit;
TextBox WidthNum;
int BackXNum = 1;
public Form2() {
Edit = new PictureBox();
Edit.BackColor = Color.Black;
WidthNum = new TextBox();
WidthNum.TextChanged += Num_TextChanged;
WidthNum.Location = new Point(100, 100);
this.Controls.Add(Edit);
this.Controls.Add(WidthNum);
this.Paint += Main_OnPaint;
}
private int GetText(TextBox textbox) {
try {
int Num = int.Parse(textbox.Text);
if (Num < 1) {
return 1;
} else {
return Num;
}
} catch (System.FormatException) {
return 1;
}
}
private void Num_TextChanged(object sender, EventArgs e) {
Edit.Invalidate();
}
private void Main_OnPaint(object sender, PaintEventArgs e) {
PictureBox Main = this.Edit;
if (GetText(WidthNum) != BackXNum) {
Edit.Image = Edit.Image;
BackXNum = GetText(WidthNum);
}
Pen pen = new Pen(Color.White, 2);
Graphics graphics = this.Edit.CreateGraphics();
for (int i = 0; i < GetText(WidthNum) + 1; i++) {
int X = (int)(Main.Width * i/ GetText(WidthNum));
graphics.DrawLine(pen, (int)X, 0, (int)X, Main.Height);
}
pen.Dispose();
}
}
}
入力した後マウスを動かさなければpictureBoxに反映されません。
どうやらPaintイベントが発生してないようなのですが、一体どうやったら発生させることができるのでしょうか?
Main_OnPaint関数や、Num_TextChanged関数で再描画させると今度は線が表示されなくなります。
TImerを使って無理矢理再描画させれば問題はなくなるのですが、こんな方法しかないのでしょうか?
追記:
開発環境はVisual Studio Express 2013 for Windows Desktopです。