C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■52909  Re[4]: DrawLinesで、線がガタガタに見えてしまう
□投稿者/ よねKEN -(2010/08/27(Fri) 15:45:37)
>
    2010/08/27(Fri) 15:47:20 編集(投稿者)

    > APIで描画しても同じことなんでしょうかね…?

    断言はできませんが、たぶん無理だと思います。
    (どんな補完方法を使おうとも画面の解像度以上の微細な表現ができない以上、限界があるため)

    例えば、3x3のピクセルで線を引くと以下のようになります。
    15度や30度の表現も無理やりですが、5度、10度傾けた線なら、どのように表現しましょうか?
    (さらに1度だけ傾けた線なら・・・)

    ■■■ 水平な線
    □□□
    □□□

    ■■□ 時計回りに15度傾けた線
    □□■
    □□□

    ■□□ 時計回りに30度傾けた線
    □■■
    □□□

    ■□□ 時計回りに45度傾けた線
    □■□
    □□■

    ■□□ 時計回りに60度傾けた線
    □■□
    □■□

    ■□□ 時計回りに75度傾けた線
    ■□□
    □■□

    ■□□ 時計回りに90度傾けた線
    ■□□
    ■□□
記事No.52883 のレス /過去ログ89より / 関連記事表示
削除チェック/

■59004  Re[12]: ばちがいでも面白そうなので、ふるかわあきひとについて
□投稿者/ あおき -(2011/05/09(Mon) 06:52:17)
>
記事No.58975 のレス /過去ログ99より / 関連記事表示
削除チェック/

■91537  Re[8]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 -(2019/07/04(Thu) 09:59:49)
    No91533 (kiku さん) に返信
    > 子コントロールは明示的にDisposeしなくても良く、
    > 子コントロールが保持するFontなどのアンマネージリソースのみをDisposeすれば良いのでしょうか?
    
    .NET Framework の場合、Control.Font プロパティは Ambient なので、手出しすべきではありません。
    一つの Font インスタンスが、複数のコントロールで扱われる可能性があるためです。
    
    
    .NET Compact Framework の場合は、正直分かりません。
    各種処理が Microsoft.AGL.Forms 名前空間経由で、DllImport されてしまっていて、
    処理内容を追跡できそうにありません。
    Microsoft 有償サポートに問い合わせようにも、ライフサイクルが既に終了してしまっていますし。
    
    
    以下、Font プロパティが返すインスタンスに関する実験コード。
    
    var sb = new StringBuilder();
    var f1 = textBox1.Font;
    var f2 = f1;
    textBox1.Font = f1;
    var f3 = textBox1.Font;
    
    sb.AppendLine("--等価判定の実装状況--");
    sb.AppendLine(string.Format("f1==f2         :{0}", f1 == f2));
    sb.AppendLine(string.Format("f1.Eq(f2)      :{0}", f1.Equals(f2)));
    sb.AppendLine(string.Format("RefEq(f1, f2)  :{0}", ReferenceEquals(f1, f2)));
    sb.AppendLine("--Fontプロパティ--");
    sb.AppendLine(string.Format("f2==f3         :{0}", f2 == f3));
    sb.AppendLine(string.Format("f2.Eq(f3)      :{0}", f2.Equals(f3)));
    sb.AppendLine(string.Format("RefEq(f2, f3)  :{0}", ReferenceEquals(f2, f3)));
    
    textBox1.Text = sb.ToString();
    MessageBox.Show(sb.ToString());
    
    ====
    
    【.NET Compact Framework 3.5 SP1】
    --等価判定の実装状況--
    f1==f2         :True
    f1.Eq(f2)      :True
    RefEq(f1, f2)  :True
    --Fontプロパティ--
    f2==f3         :False
    f2.Eq(f3)      :True
    RefEq(f2, f3)  :False
    
    
    【.NET Framework 3.5 SP1】
    --等価判定の実装状況--
    f1==f2         :True
    f1.Eq(f2)      :True
    RefEq(f1, f2)  :True
    --Fontプロパティ--
    f2==f3         :True
    f2.Eq(f3)      :True
    RefEq(f2, f3)  :True
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91538  Re[9]: メモリリークに関して
□投稿者/ kiku -(2019/07/04(Thu) 10:46:45)
    No91537 (魔界の仮面弁士 さん) に返信
    > .NET Framework の場合、Control.Font プロパティは Ambient なので、手出しすべきではありません。
    > 一つの Font インスタンスが、複数のコントロールで扱われる可能性があるためです。
    > .NET Compact Framework の場合は、正直分かりません。
    > 各種処理が Microsoft.AGL.Forms 名前空間経由で、DllImport されてしまっていて、
    > 処理内容を追跡できそうにありません。
    > Microsoft 有償サポートに問い合わせようにも、ライフサイクルが既に終了してしまっていますし。

    AmbientとはフォームのFontを子コントロールが継承する機能であると理解しました。
    よって、フォームのFontと子コントロールのFontは同じインスタンスである場合がある。
    このような状況において、子コントロールのFontをDisposeしてしまうと、
    フォームのFontがどうなっちゃうの?ってことであると理解しました。

    フォームAのFontと、フォームBのFontが共用されることがなければ
    フォームAのDisposeのタイミングで、フォームAの子コントールのFontを
    Disposeするには、問題ないと考えても良いのでしょうか?
    ※よくわからないと記述があるので、わからないという回答かと思いますが(泣き)


    > 以下、Font プロパティが返すインスタンスに関する実験コード。

    この実験の結果をどのように理解していいか
    正直に言いますと良くわかりませんでした。
    FALSEになるってことは、textBox1.Font = f1;を実行したときに
    f1が設定されるのではなく、フォームのFontから継承される機能が働き、
    別のインスタンスになるのではという理解で現在はいます。
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/

■94972  Re[1]: 対数グラフをリニアに戻すとエラーとなる
□投稿者/ 還暦おやじkuma -(2020/06/07(Sun) 22:40:13)
    No94971 (還暦おやじkuma さん) に返信
    > C#を始めて3年目の初心者(還暦おやじkuma)です。長文すみません。
    > 
    > **環境:Windows10 ver.1909, Intel Core i5, RAM 8GB,x64,
    > Visual Studio Express 2013 for Windows Desktop, C# 5.0, NetFramework 4.5
    > (Community2017,2019系は会社の都合で入れることができませんので古い環境でやっています)
    > 
    > **疑問点:アプリを実行してChartType=Lineでリニアグラフが描かれ、チェックボックスでX軸を対数表示にすることまではできますが、もう1度チェックボックスをクリックしてグラフを再描画してリニアに戻そうとするとエラーとなります。描画ルーチンのtry-catchでは引っ掛かりません。
    > 原因と解決方法がお分かりでしたらご教示いただけますでしょうか?。
    > 
    > **補足:
    > ・デザイナーではlog_checkBoxという名前のCheckBoxを1つ追加してあるだけで、他はデフォルトのままです。
    追記 すみません、もちろんChartもdrawGraph側に1つ入れています。
    > 
    > ・X軸のデータmydataXの[0]に意図的に0.00を入れてありますが、対数グラフを描画する際には飛ばすようにしています。もっとも、元データの0.00を1.10とかにしても結果は同じエラーとなりますが。
    > 
    > **エラーメッセージ:
    > 「追加情報:軸オブジェクト - 対数グラフでは、負の値または 0 を正しくプロットできません。対数スケールで解釈できるのは正の値だけです。」
    > と出ますが、もともと負の値は無く、0も回避するようにしているのと、1度目は対数で描画できているので、意味が分かりません。
    > 
    > ・dobon.netさんの「捕捉されなかった例外がスローされたことを知る」
    > http://dobon.net/vb/dotnet/programing/unhandledexception.html
    > を参考に、MainにThreadExceptionイベントハンドラを入れてみましたが、
    > Message = 軸オブジェクト - 対数グラフでは、負の値または 0 を正しくプロットできません。対数スケールで解釈できるのは正の値だけです。
    > パラメーター名:minimumValue
    > Source = System.Windows.Forms.DataVisualization
    > TypeName = ArgumentOutOfRangeException
    > StackTrace =    場所 System.Windows.Forms.DataVisualization.Charting.Axis.EstimateLogarithmicAxis(Double& minimumValue, Double& maximumValue, Double crossingValue, Boolean autoMaximum, Boolean autoMinimum)
    >  以下、場所がずらずらと。
    > と出るため、私には原因が分かりませんでした。
    > 
    > パラメーター名:minimumValueは
    > 「this.chart1.ChartAreas[0].AxisX.Minimum = 1.0;//対数表示にはこれが必要」
    > としてあるのですが、どうもこれのことではないような・・・。
    > 
    > = = = = = = = = = = = = Form1ソース= = = = = = = = = = = = = = = = 
    > using はデフォルトのままなので省略
    > namespace LogGraphTest
    > {
    >     public partial class Form1 : Form
    >     {
    >         public Form1()
    >         {
    >             InitializeComponent();
    >         }
    >         //以下は、もともとは別のクラスで読み込むデータだが質問のサンプルとしてここに書いているだけ。
    >         static public double[] mydataX = new double[] { 0.00, 3.02, 3.91, 32.66, 141.51, 251.45, 461.08, 771.34, 801.49, 911.34, 1000.00 };//意図的に[0]に0を入れてある。
    >         static public double[] mydataY1 = new double[] { 102.14, 92.08, 53.44, 46.56, 78.27, 49.20, 103.60, 48.33, 29.83, 71.15, 7.22 };
    > 
    >         drawGraph form_graph = new drawGraph();//もともとは別のクラスからも呼び出しているがサンプルとしてここにこう書いているだけ。
    > 
    > 
    >         private void Form1_Load(object sender, EventArgs e)
    >         {
    >             form_graph.Left = this.Right;
    >             form_graph.Top = this.Top;
    >             form_graph.StartPosition = FormStartPosition.Manual;
    >             form_graph.Show();
    > 
    >         }
    >     }
    > }
    > = = = = = = = = = = = = drawGraphソース= = = = = = = = = = = = = = = = 
    > using はデフォルトのものは省略
    > using System.Windows.Forms.DataVisualization.Charting;//追加した
    > using System.Diagnostics;//try-catchの結果を出力に出すために追加した
    > 
    > namespace LogGraphTest
    > {
    >     public partial class drawGraph : Form
    >     {
    >         public drawGraph()
    >         {
    >             InitializeComponent();
    >         }
    > 
    >         static bool isGraphLog = false;//テスト用に初期値を入れ替えるためにここに記載
    > 
    >         private void drawGraph_Load(object sender, EventArgs e)
    >         {
    >             chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
    >             chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
    >             chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
    > 
    >             drawDataGraph();
    >             log_checkBox.Checked = isGraphLog;
    >         }
    > 
    >         public void drawDataGraph()
    >         {
    >             try
    >             {
    >                 chart1.Series.Clear();//log_checkBoxをクリックしたときにdrawDataGraph()を再描画するために過去のSeriesをクリアする
    >                 if (isGraphLog)
    >                 {
    >                     this.chart1.ChartAreas[0].AxisX.Minimum = 1.0;//対数表示にはこれが必要
    >                 }
    >                 else
    >                 {
    >                     this.chart1.ChartAreas[0].AxisX.Minimum = 0.0;//リニア表示にはこれが必要
    >                 }
    > 
    >                 if (isGraphLog)
    >                 {
    >                     chart1.ChartAreas[0].AxisX.IsStartedFromZero = false;//対数表示にはこれが必要か?、データも0を含んでいてはいけないが
    >                     chart1.ChartAreas[0].AxisX.IsLogarithmic = true;
    >                 }
    > 
    >                 Series[] dseries = new Series[2];//もともと複数のデータ系列があったため配列として[2]としてあるが、このサンプルでは1つなので意味は無い。
    >                 dseries[0] = new Series();
    >                 dseries[0].ChartType = SeriesChartType.Line;
    >                 dseries[0].Name = "DataY1";
    >                 dseries[0].Color = Color.Black;
    >                 this.chart1.Series.Add(dseries[0]);
    > 
    >                 int startData = 0;
    >                 if (isGraphLog) { startData = 1; }//Logの時はデータがx=0である[0]を飛ばしている。このためLogのグラフが描ける、のでは?
    >                 for (int i = startData; i < 11; i++)
    >                 {
    >                     chart1.Series[dseries[0].Name].Points.AddXY(Form1.mydataX[i], Form1.mydataY1[i]);
    >                 }
    >             }
    >             catch (System.Exception ex)
    >             {
    >                 Debug.WriteLine("Message = " + ex.Message);
    >                 Debug.WriteLine("Source = " + ex.Source);
    >                 Debug.WriteLine("StackTrace = " + ex.StackTrace);
    >                 throw;//例外を再スローする
    >             }
    >         }
    > 
    >         private void log_checkBox_CheckedChanged(object sender, EventArgs e)
    >         {
    >             if (log_checkBox.Checked)// isGraphLog = log_checkBox.Checkedとも書けると思うが念のために細かく書いた。
    >             {
    >                 isGraphLog = true;
    >             }
    >             else
    >             {
    >                 isGraphLog = false;
    >             }
    >             drawDataGraph();
    >         }
    >     }
    > }
    > = = = = = = = = = = = = ソースはここまで= = = = = = = = = = = = = = = = 
    > すみませんが、ご教示よろしくお願いいたします。
    > 
記事No.94971 のレス /過去ログ164より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -