MessageForm
メイン フォーム ( ) の上にダイアログ フォーム ( ) を表示する必要がありParentForm
ます。には、実行時にいくつかのコントロールを追加MessageForm
するパネル ( mainPanel
) が含まれています (閉じるボタンと多くのラベルとリンクラベル)。MessageForm には特定の動作があります。半透明である必要があり、表示時には ParentForm が非アクティブである必要があります。
public MessageForm(FrmGlobalStatus _parent)
{
InitializeComponent();
this.TransparencyKey = this.BackColor;
}
protected override void OnPaintBackground(PaintEventArgs pe)
{
var hb = new HatchBrush(HatchStyle.Percent50,
System.Drawing.ColorTranslator.FromHtml(HATCH_BACK_COLOR),
this.TransparencyKey);
pe.Graphics.FillRectangle(hb, this.DisplayRectangle);
}
private void mainPanel_Paint(object sender, PaintEventArgs pe)
{
using (System.Drawing.Pen p = new Pen(new SolidBrush(this.BorderColor)))
{
if (borderRadius > 0)
{
DrawRoundRect(pe.Graphics, p, 0, 0, mainPanel.Width - 1, mainPanel.Height - 1, borderRadius, this.FillColor);
}
else
{
pe.Graphics.DrawRectangle(p, 0, 0, mainPanel.Width - 1, mainPanel.Height - 1);
}
}
}
MessageForm を表示する関数:
public void Show()
{
LinkLabel newLinkLabel;
Label newLabel;
int lastItemBottom = 0;
if (Items.Count > 0)
{
for (int i = 0; i < Items.Count; i++)
{
if (Items[i].LinkAreaLength != 0)
{
newLinkLabel = new LinkLabel();
newLinkLabel.Location = new Point(LINKLABEL_H_MARGIN, LINKLABEL_V_MARGIN + i * LINKLABEL_STEP);
lastItemBottom = newLinkLabel.Bottom;
newLinkLabel.BackColor = Color.Transparent;
newLinkLabel.Text = Items[i].Text;
newLinkLabel.LinkColor = LinkDefaultColor;
newLinkLabel.ActiveLinkColor = LinkActiveColor;
newLinkLabel.AutoSize = true;
newLinkLabel.Links.Add(Items[i].LinkAreaStart, Items[i].LinkAreaLength, Items[i].URL);
newLinkLabel.VisitedLinkColor = LinkVisitedColor;
newLinkLabel.Name = LINK_LABEL_FAMILY + i.ToString();
newLinkLabel.LinkClicked += new LinkLabelLinkClickedEventHandler(LinkClicked);
newLinkLabel.MouseHover += new EventHandler(Link_MouseHover);
newLinkLabel.MouseLeave += new EventHandler(Link_MouseLeave);
//for max label length calculation
labelsWidth.Add(Convert.ToInt16((newLinkLabel.CreateGraphics().MeasureString(newLinkLabel.Text, newLinkLabel.Font)).Width));
this.mainPanel.Controls.Add(newLinkLabel);
newLinkLabel.BringToFront();
}
else
{
newLabel = new Label();
newLabel.Location = new Point(LINKLABEL_H_MARGIN, LINKLABEL_V_MARGIN + i * LINKLABEL_STEP);
lastItemBottom = newLabel.Bottom;
newLabel.BackColor = Color.Transparent;
newLabel.Text = Items[i].Text;
newLabel.Name = LABEL_FAMILY + i.ToString();
newLabel.AutoSize = true;
//for max label length calculation
labelsWidth.Add(Convert.ToInt16((newLabel.CreateGraphics().MeasureString(newLabel.Text, newLabel.Font)).Width));
this.mainPanel.Controls.Add(newLabel);
newLabel.BringToFront();
}
}
//centering the mainPanel on MessageForm
mainPanel.Width = BOX_WIDTH;
mainPanel.Height = lastItemBottom + 2;// +LINKLABEL_V_MARGIN;
mainPanel.Location = new Point((Width - mainPanel.Width) / 2, (Height - mainPanel.Height) / 2);
ShowDialog(parent);
}
}
「アイテム」は、ラベルとLinkLabel
コントロールのすべてのテキストを既に含む特定の構造のリストです。さて、問題は次のとおりです。Show
から関数を呼び出すとParentForm
、MessageForm
ちらつきがあり、目が邪魔になるのに十分です。このちらつきをなくすにはどうすればよいですか?