2013-02-22 1 views
0

Я работаю с приложением формы Windows в C#. Я установил лицензионную версию TeeChart for.net v3. Я пытаюсь удалить часть нежелательной части TeeChart.
Благодаря пользователям веб-сайта stackoverflow они помогли мне создать всплывающее окно мыши на TeeChart. Теперь я хочу реализовать некоторые функции для этих всплывающих кликов.
, используя приведенный ниже код, я могу создать щелчок правой кнопкой мыши.Как удалить часть начала, конец TeeChart

double m_dblTempVolFromTo = 0; 
double dtFromTo = 0; 
private void mainTChart_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (!checkBoxIsTime.Checked && e.Button == MouseButtons.Right) 
    { 
     m_dblTempVolFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + m_dblTempVolFromTo + " cc")); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + m_dblTempVolFromTo + " cc")); 
     mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
     mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 

    } 
    else if (checkBoxIsTime.Checked && e.Button == MouseButtons.Right) 
    { 
     DateTime dt; 
     dtFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     DateTime.TryParse(dtFromTo.ToString(), out dt); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
     mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 
    } 

} 

Приведенный выше код создает всплывающее окно, как показано ниже. Image
Я пытаюсь реализовать функциональность для «For 7.6 cc» и «To 7.6 cc». , когда я нажимаю «To 7.6 cc», тогда диаграмма должна удаляться из шкалы от «0 до 7.6», а оставшаяся часть должна быть там. То же самое относится и к клику «От 145 см3», он должен удалить диаграмму с «145 до 150 (конец шкалы)».
Нажмите «Кому», чтобы удалить стартовую часть диаграммы и нажмите «От», чтобы удалить конечную часть диаграммы.
Я так пробовал, но я не могу получить то, что хочу.

void From_Click(object sender, EventArgs e) 
{ 
    if (!checkBoxIsTime.Checked) 
    { 
     var destBitmap = mainTChart.Export.Image.Bitmap.Clone(new Rect(0, 0, 100, 200), sourceBitmap.PixelFormat); 
    } 
} 

void To_Click(object sender, EventArgs e) 
{ 

} 

даже я попробовал этот код также

void mainTChart_GetLegendRect(object sender, mainTChart.GetLegendRectEventArgs e) 
{ 
    Rectangle cropRect = e.Rectangle; 
    Bitmap legendImg = new Bitmap(cropRect.Width, cropRect.Height); 

    using (Graphics g = Graphics.FromImage(legendImg)) 
    { 
     g.DrawImage(chartBmp, new Rectangle(0, 0, mainTChart.Width, mainTChart.Height), 
       cropRect, 
       GraphicsUnit.Pixel); 
    } 
} 

ничего не работает для меня. Может ли кто-нибудь помочь мне с этой задачей.

Заранее спасибо.

Отредактировано , когда у меня есть ось X как время, тогда я не могу получить время отображения на щелчке мыши. Код, который я попробовал, как показано ниже

DateTime dt; 
     dtFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     DateTime.TryParse(dtFromTo.ToString(), out dt); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + dt.TimeOfDay.ToString())); 

Я получаю как этот enter image description here я получаю, как показано на изображении выше, но хотите, чтобы отобразить эквивалентное время на щелчка правой кнопкой мыши. Я получаю некоторое значение для этой переменной «dtFromTo», например, 41322.9876587965 «но я не могу преобразовать это значение вовремя. Пожалуйста, помогите мне.

ответ

2

Известные значения, которые вы хотите« вырезать »От/до, вы можете просто установить нижнюю ось минимального и максимальных свойства.

, когда я нажмите «до 7,6 куб», то диаграмма должна удалить из «0 до 7.6» масштаба и оставшаяся часть должен быть там

Это позволило бы be:

mainTChart.Axes.Bottom.AutomaticMinimum = false; 
mainTChart.Axes.Bottom.Minimum = 7.6; 

То же самое относится и к клику «От 145 см3», он должен удалить диаграмму с «145 до 150 (конец шкалы)».

Это будет сделано установка Maximum:

mainTChart.Axes.Bottom.AutomaticMaximum = false; 
mainTChart.Axes.Bottom.Maximum = 145; 

Так что я думаю, это должно на хитрость:

void From_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMaximum = false; 
     mainTChart.Axes.Bottom.Maximum = m_dblTempVolFromTo; 
    } 

    void To_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMinimum = false; 
     mainTChart.Axes.Bottom.Minimum = m_dblTempVolFromTo; 
    } 

Я также предлагаю вам создать ContextMenu в mainTChart_MouseDown события insted из mainTChart_MouseUp, потому что создание его на событии mainTChart_MouseUp слишком поздно, показанное ContextMenu не покажет обновленную версию.

Edit:

Для DateTime XValues, неправильная линия это одна:

DateTime.TryParse(dtFromTo.ToString(), out dt); 

Здесь полный код, который, кажется, работает хорошо для меня здесь:

private void InitializeChart() 
    { 
     mainTChart.Aspect.View3D = false; 

     Line line1 = new Line(mainTChart.Chart); 
     line1.XValues.DateTime = true; 
     line1.FillSampleValues(); 
     mainTChart.Axes.Bottom.Labels.DateTimeFormat = "hh:mm"; 

     mainTChart.MouseDown += new MouseEventHandler(mainTChart_MouseDown); 
    } 

    double m_dblTempVolFromTo = 0; 
    double dtFromTo = 0; 

    void mainTChart_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (!mainTChart.Axes.Bottom.IsDateTime && e.Button == MouseButtons.Right) 
     { 
      m_dblTempVolFromTo = mainTChart[0].XScreenToValue(e.X); 
      mainTChart.ContextMenu = new ContextMenu(); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + m_dblTempVolFromTo + " cc")); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + m_dblTempVolFromTo + " cc")); 
      mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
      mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 

     } 
     else if (e.Button == MouseButtons.Right) 
     { 
      dtFromTo = mainTChart[0].XScreenToValue(e.X); 
      String stFromTo = mainTChart.Axes.Bottom.Labels.LabelValue(dtFromTo); 
      mainTChart.ContextMenu = new ContextMenu(); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + stFromTo)); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + stFromTo)); 
      mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
      mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 
     } 
    } 

    void From_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMaximum = false; 
     if (!mainTChart.Axes.Bottom.IsDateTime) 
      mainTChart.Axes.Bottom.Maximum = m_dblTempVolFromTo; 
     else 
      mainTChart.Axes.Bottom.Maximum = dtFromTo; 
    } 

    void To_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMinimum = false; 
     if (!mainTChart.Axes.Bottom.IsDateTime) 
      mainTChart.Axes.Bottom.Minimum = m_dblTempVolFromTo; 
     else 
      mainTChart.Axes.Bottom.Minimum = dtFromTo; 
    } 
+0

Большое спасибо за вашу помощь, он отлично работает. Но у меня есть еще одно небольшое сомнение, которое я добавил еще одну функцию для всплывающего окна, которое называется «Сброс». Когда я нажимаю «Сброс», он должен выполнить отмену операции. вы можете помочь мне с этим, пожалуйста. – reddy

+0

Можете ли вы дать представление о том, как реализовать функциональность «перезагрузки». – reddy

+0

спасибо за ваш ответ, теперь я реализовал «перезагрузку» также на основе вашей идеи. спасибо alot – reddy