一度作成された色のグラデーションを表示するユーザーコントロールがあります。Windowsフォーム、動的に生成されたビットマップ上の表示インジケータ
usercontrolにはコントロールが含まれていません。ピクチャボックスを追加するか動的に追加する必要があるかどうかはわかりません。
その画像には、現在の結果が表示される行を表示したいと思います。マップ上にグラデーションイメージを作成するのに問題はありませんが、インジケータ(親フォームからCurrentValueを呼び出す)を更新するたびにキャッシュするため、インジケータラインをグラデーションイメージの上に配置します。これは1秒間に約30回更新されます。したがって、下のコードがどのように動作しているかで、毎回グラデーションを再描画しています。これはちらつきです。
namespace Maps.UserControls
{
public partial class UserControlLegend : UserControl
{
private double m_CurrentValue;
public double CurrentValue
{
get
{
return m_CurrentValue;
}
set
{
m_CurrentValue = value;
RefreshValue();
}
}
public UserControlLegend()
{
InitializeComponent();
}
private void UserControlLegend_Paint(object sender, PaintEventArgs e)
{
if (b == null)
{
g = e.Graphics;
b = new System.Drawing.Bitmap(menuWidth, menuHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
// Code here that draws Menu
// Cache bitmap here?
g.Dispose();
}
}
private void RefreshValue()
{
this.Refresh();
g = this.CreateGraphics();
g.DrawImage(b, 0, 0);
//Code to Calcuate current Indicator Location
int x3 = 0;
// Draws current indicator correctly
g.DrawLine(new Pen(new SolidBrush(Color.Black)), this.Width/2 - 15, x3, this.Width/2 - 5, x3);
g.Dispose();
}
}
}
私はそれを理解しました。私はビットマップを描画し、インジケータの別のコントロールを使用して、ちょうど私がそれを望むところにポイントを移動しました。うまくいく。 – dave2118