Line Chart Component [GDI+] - part 2
- Colors
The comboboxes are filled with all non-system colors and the labels next to the comboboxes display dynamically the selected color. Below you can find the code for filling the main area combo box. The other comboboxes are filled in the same manner.
Array allColors = Enum.GetValues(typeof(KnownColor));
ArrayList listOfColors = new ArrayList();
string tmpColor;
KnownColor tmpKnownColor;
foreach (object color in allColors)
{
tmpKnownColor = (KnownColor) color;
if (!Color.FromKnownColor(tmpKnownColor).IsSystemColor)
{
//Add only non-system colors to arraylist
listOfColors.Add(tmpKnownColor.ToString());
}
}
this.cmbMainArea.DataSource = listOfColors;
this.cmbChartArea.DataSource = listOfColors.Clone();
this.cmbCurve.DataSource = listOfColors.Clone();
this.cmbGrid.DataSource = listOfColors.Clone();
//Main Area
tmpColor = ConfigurationSettings.AppSettings["BrushMainArea"].ToString();
for (int i=0; i < cmbMainArea.Items.Count; i++)
{
if (tmpColor == cmbMainArea.Items[i].ToString())
{
cmbMainArea.SelectedIndex = i;
break;
}
}
KnownColor is an enumeration of all available colors. The array allColors will consist of all "KnownColors" and the arrayList listOfColors will contain all non-system colornames that will eventually be shown in the combobox. The dataSource of the comboBoxes are then set to the listOfColors or a clone of it. Eventhandling is enabled for setting the backColor of the labels.
private void cmb_SelectedIndexChanged(object sender, System.EventArgs e)
{
ComboBox cmb = (ComboBox) sender;
switch (cmb.Name)
{
case "cmbMainArea" :
this.lblColorMain.BackColor = Color.FromName(cmb.Text);
break;
case "cmbChartArea" :
this.lblColorChart.BackColor = Color.FromName(cmb.Text);
break;
case "cmbCurve" :
this.lblColorCurve.BackColor = Color.FromName(cmb.Text);
break;
case "cmbGrid" :
this.lblColorGrid.BackColor = Color.FromName(cmb.Text);
break;
}
}
- Refresh of chart
When the button is clicked all changes in the settings are pushed to the chart component.
private void buttonUpdate_Click(object sender, System.EventArgs e)
{
//Update marges
this.graph.UpdateMarges(Convert.ToInt32(this.txtTop.Text),
Convert.ToInt32(this.txtBottom.Text),
Convert.ToInt32(this.txtLeft.Text),
Convert.ToInt32(this.txtRight.Text));
//Update colors
this.graph.UpdateColors(cmbMainArea.Text, cmbChartArea.Text, cmbCurve.Text, cmbGrid.Text);
//Invalidate
this.groupBoxGraph.Visible = false;
this.groupBoxGraph.Visible = true;
}
public void UpdateMarges(int top, int bottom, int left, int right)
{
this.marginTop = top;
this.marginBottom = bottom;
this.marginLeft = left;
this.marginRight = right;
}
public void UpdateColors(string mainArea, string chartArea, string lineColor, string gridColor)
{
this.brushMainArea = new SolidBrush(Color.FromName(mainArea));
this.brushChartArea = new SolidBrush(Color.FromName(chartArea));
this.currentCurve.Color = Color.FromName(lineColor);
this.brushGrid = new SolidBrush(Color.FromName(gridColor));
}
To repaint the usercontrol I first used the Invalidate-method of the graph component, but this didn't do the trick [I should further investigate why this didn't work]. So I used the visibility-property of the groupBox to trigger the paint-method.
0 Comments:
Post a Comment
<< Home