none
ChartコントロールのY軸タイトルのレイアウト設定 RRS feed

  • 質問

  • お世話になります。

    現在、VisualC#(.NET Framework3.5 SP1)にて、

    Chartコントロール(MS Chart Controls For.NET Framework3.5 SP1)を使用して

    グラフを表示する機能のあるWindowsFormアプリを開発しています。

     

    Y軸のタイトルに単位(水平方向に表示)を表示するように設定したのですが、

    いざ表示するとタイトルが自動改行されてしまい、見難くなってしまいます。

     

    探し方が悪いのか、

    自動改行オフになりそうなプロパティや、Y軸タイトル部分の幅を設定するようなプロパティ等、

    見つけることができませんでした。

     

    回避方法等をご存知の方がいらっしゃいましたら、お知恵をお貸し頂けないでしょうか?

    2011年8月25日 2:46

回答

  • 横に隙間をあけて、自前で描画するのは?

    public Form1()
    {
      InitializeComponent();
    
      var pos = this.chart1.ChartAreas[0].Position;
      pos.Auto = false;
      pos.X = 50;
      chart1.PostPaint += new EventHandler<System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs>(chart1_PostPaint);
    }
    
    void chart1_PostPaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
    {
      System.Windows.Forms.DataVisualization.Charting.Chart chart=(System.Windows.Forms.DataVisualization.Charting.Chart)sender;
      float width=chart.ChartAreas[0].Position.X;
      float height=chart.Height;
      System.Drawing.RectangleF rect=new RectangleF(0,0,width,height);
    
      StringFormat sf = new StringFormat();
      Font fnt = new Font("MS UI Gothic", 10);
      e.ChartGraphics.Graphics.DrawString("あいうえおかきくけこ", fnt, Brushes.Red,rect, sf);
    }
    



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
    2011年8月25日 3:59
  • 教えて頂いた方法を使った場合は、、、

    切り替える単位分のチャートエリアを作ってenabledで表示するグラフを制御するか、

    もしくは、

    このチャートは1秒間隔で更新するので、単一のチャートエリアを作って、更新毎に

    単位の選択状態を持ったコントロールを見て描画するか、


    コンボボックス等で単位を切り替えた時に Chart を Invalidate すればいいのではないでしょうか。サンプルでも使われていますし。
    (URL は .NET Framework 4 が対象ですが、Chart Controls for Microsoft .NET Framework 3.5 でも同じです。)

    Chart.Invalidate メソッド (System.Windows.Forms.DataVisualization.Charting)
    http://msdn.microsoft.com/ja-jp/library/dd488967.aspx
    2011年8月27日 7:22

すべての返信

  • 横に隙間をあけて、自前で描画するのは?

    public Form1()
    {
      InitializeComponent();
    
      var pos = this.chart1.ChartAreas[0].Position;
      pos.Auto = false;
      pos.X = 50;
      chart1.PostPaint += new EventHandler<System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs>(chart1_PostPaint);
    }
    
    void chart1_PostPaint(object sender, System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs e)
    {
      System.Windows.Forms.DataVisualization.Charting.Chart chart=(System.Windows.Forms.DataVisualization.Charting.Chart)sender;
      float width=chart.ChartAreas[0].Position.X;
      float height=chart.Height;
      System.Drawing.RectangleF rect=new RectangleF(0,0,width,height);
    
      StringFormat sf = new StringFormat();
      Font fnt = new Font("MS UI Gothic", 10);
      e.ChartGraphics.Graphics.DrawString("あいうえおかきくけこ", fnt, Brushes.Red,rect, sf);
    }
    



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
    2011年8月25日 3:59
  • 早速の返信ありがとうございます。

    また、サンプルソースも添えて頂き、ありがとうございます。

     

    なるほど・・・

    グラフ描画時に自前描画するという方法もありますね。

    実は、このグラフは線グラフなのですが、

    フォーム上のコンボボックス等のコントロールから単位を変更したら、

    単位の表示を変更してY軸レンジを変更して云々・・・といったように

    チャートを動的に変更をさせようと考えているので、プロパティ等で

    調整できたらなぁ・・・と思っていたのですが。。。

    難しそうですかね。

     

    教えて頂いた方法を使った場合は、、、

    切り替える単位分のチャートエリアを作ってenabledで表示するグラフを制御するか、

    もしくは、

    このチャートは1秒間隔で更新するので、単一のチャートエリアを作って、更新毎に

    単位の選択状態を持ったコントロールを見て描画するか、

     

    プロパティ等で調整できないとなると、最終的にはこういった方法になりそうですね。。。

    ん~このコントロール・・・なんか惜しいって感じですね。

     


    2011年8月25日 5:03
  • 教えて頂いた方法を使った場合は、、、

    切り替える単位分のチャートエリアを作ってenabledで表示するグラフを制御するか、

    もしくは、

    このチャートは1秒間隔で更新するので、単一のチャートエリアを作って、更新毎に

    単位の選択状態を持ったコントロールを見て描画するか、


    コンボボックス等で単位を切り替えた時に Chart を Invalidate すればいいのではないでしょうか。サンプルでも使われていますし。
    (URL は .NET Framework 4 が対象ですが、Chart Controls for Microsoft .NET Framework 3.5 でも同じです。)

    Chart.Invalidate メソッド (System.Windows.Forms.DataVisualization.Charting)
    http://msdn.microsoft.com/ja-jp/library/dd488967.aspx
    2011年8月27日 7:22
  • totojoさん、ご返信ありがとうございました。

     

    なるほど、データ更新時のチャート再描画はInvalidateを使用すればいいのですね。

    今回のチャートは、1秒毎のリアルタイムデータの様子を表示するものなので、チャートも同様に1秒間隔の再描画が必要なるかと・・・。

    なので、その再描画のタイミングで、選択された単位に応じて描画するようにしてもいいのかな・・・と思いました。

     

    一先ずは、gekkaさんとtotojoさんに教えて頂いた方法を利用して作ってみようかと思います。

    お二方とも、ご助言ありがとうございました。

     

    2011年8月28日 23:56