Powiększanie i przewijanie wykresów C#

Czyli mała ale bardzo przydatna rzecz, której znalezienie może zająć trochę czasu 🙂


 chartArea1.CursorX.IsUserEnabled = true;
 chartArea1.CursorX.IsUserSelectionEnabled = true;
 chartArea1.CursorY.IsUserEnabled = true;
 chartArea1.CursorY.IsUserSelectionEnabled = true;
 chart1.ChartAreas.Add(chartArea1);

Zoom and scroll chart in c#
Przykład przewijania/powiększania wykresów w C#

Przecinek w nazwie kolumny a red cross error na wykresie

Niedawno miałem nieprzyjemność borykania się z problemem „czerwonego krzyża” wyświetlanego na wykresach ( Chart , System.Windows.Forms.DataVisualization.Charting ). Błąd ten pojawia się m.in. przy problemach z przetworzeniem danych wejściowych. W moim przypadku przyczyną problemów były przecinki w nazwach kolumn obiektu DataTable, który to ustawiałem jako DataSource dla wykresu.

Dokładnie: Wartości w nazwach kolumn, które znajdowały się po przecinku były „ignorowane” w DataSource. Skutkiem tego nazwy kolumn w DataSource nie zgadzały się z tymi w DataTable, w moim przypadku parę kolumn miało tę samą nazwę ( co jest oczywistym błędem).

red cross error csharp chart
🙂

Zmiana rozmiarów paneli w c#

Przeszukując czeluści internetu natrafiłem na bardzo ciekawą, rozszerzającą możliwości zwykłego Forms.Panel 'u o dynamiczne zmienianie jego rozmiaru. Klasę, która zapewnia tę funkcjonalność znalazłem na forum msdn, oto ona:

Klasę należy dodać do projektu, skompilować. Nowa kontrolka powinna pojawić się w Toolbox 'ie

nobugz:

using System;
using System.Drawing;
using  System.Windows.Forms;

public class SizeablePanel : Panel {
 private const int cGripSize = 20;
 private bool mDragging;
 private Point mDragPos;

 public SizeablePanel() {
 this.DoubleBuffered = true;
 this.SetStyle(ControlStyles.ResizeRedraw, true);
 this.BackColor =  Color.White;
 }

 protected override void  OnPaint(PaintEventArgs e) {
 ControlPaint.DrawSizeGrip(e.Graphics,  this.BackColor,
 new Rectangle(this.ClientSize.Width -  cGripSize, this.ClientSize.Height - cGripSize, cGripSize, cGripSize));
 base.OnPaint(e);
 }

 private bool IsOnGrip(Point pos) {
 return pos.X >= this.ClientSize.Width - cGripSize &&
 pos.Y >= this.ClientSize.Height - cGripSize;
 }

 protected override void OnMouseDown(MouseEventArgs e) {
 mDragging  = IsOnGrip(e.Location);
 mDragPos = e.Location;
 base.OnMouseDown(e);
 }

 protected override void  OnMouseUp(MouseEventArgs e) {
 mDragging = false;
 base.OnMouseUp(e);
 }

 protected override void  OnMouseMove(MouseEventArgs e) {
 if (mDragging) {
 this.Size = new Size(this.Width + e.X - mDragPos.X,
 this.Height + e.Y - mDragPos.Y);
 mDragPos = e.Location;
 }
 else if (IsOnGrip(e.Location)) this.Cursor = Cursors.SizeNWSE;
 else this.Cursor = Cursors.Default;
 base.OnMouseMove(e);
 }
}

Od siebie dodałbym tylko


this.BringToFront();

w OnMouseMove();.

Obsługa right click w C#

Do osiągnięcia efektu obsługi „prawego kliku” należy odpowiednio spreparować akcje ( event ) MouseDown. Metoda, która powinna zostać wywołana dla tej akcji powinna wyglądać w następujący sposób:


private void panel_RightMouseDown(object sender, MouseEventArgs e)
{
 if (e.Button.ToString() == "Right")
 {
  // TODO
 }
}

Dwa słowa o wymaganiach WordPress

Zastanawiającym jest fakt nie umieszczenia w wymaganiach jakie musi spełniać serwer, na którym chcemy zainstalować WordPress 'a , informacji o wymaganej minimalnej dostępnej pamięci. W wymaganiach podanych na stronie brakuje informacji o tym, że wskazane jest posiadanie 64mb pamięci na serwerze.

Brak wystarczającej pamięci objawi się nam poprzez sporadyczne wyświetlanie pustej strony, dopiero z logów serwera dowiemy się o występowaniu błędu:

Fatal error: Allowed memory size of …

Informacja taka powinna być podawana w wymaganiach, szczególnie że błędy które generowane są przez brak pamięci mogą objawiać się sporadycznie, a nie każdy przegląda regularnie logi serwera.