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

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

C# と VB.NET の入門サイト

Re[10]: 「複数のChartでのマウス位置による数量表示」の追加です


(過去ログ 171 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■98552 / inTopicNo.1)  「複数のChartでのマウス位置による数量表示」の追加です
  
□投稿者/ ゆい (25回)-(2021/11/30(Tue) 18:04:47)

分類:[VB.NET/VB2005 以降] 

先日お教えいただいた98525の追加の質問でお願いします。


> YLables.Add(Chart1, Label1)
> YLables.Add(Chart2, Label2)
> 'YLables.Add(Chart3, Label3) 'Chart3 は値を拾わない

長文のため分かり易さからも、上のを Private Sub下 に置きたいのですが、そのまま再実行もしますと

> ハンドルされてない例外
> System.ArgumentException: '同一のキーを含む項目が既に追加されています。

のエラーメッセが出ます。
実行後一旦削除もできれば可能なようにも思うのですが、回避する方法を教えていただけないでしょうか?
よろしくお願いします。




引用返信 編集キー/
■98553 / inTopicNo.2)  Re[1]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3234回)-(2021/11/30(Tue) 18:58:54)
No98552 (ゆい さん) に返信
>> YLables.Add(Chart1, Label1)
>> YLables.Add(Chart2, Label2)
>> 'YLables.Add(Chart3, Label3) 'Chart3 は値を拾わない
> 長文のため分かり易さからも、上のを Private Sub下 に置きたいのですが、

えぇと…どういう意味でしょう?

No98525 において、上記の Add メソッドの呼び出しは、
既に Private Sub Form1_Load の中に書かれていますよね。


要するに、フォームの InitializeComponent が呼ばれた後で
各チャートごとに一回ずつ Add すれば良いだけなので、
呼び出すタイミングとしては
 ・コンストラクタで、InitializeComponent 呼び出しの後
 ・OnLoad メソッドのオーバーライド内
 ・Load イベント ハンドラ
のいずれかが妥当だと思います。

もし、Form1 の Load イベントが複数回発生するような状況
……たとえば、ShowDialog で呼び出されており、画面が閉じられた後で
呼び出し元が Dispose することなく、再度 ShowDialog した場合など……
を問題としているのであれば、Load や OnLoad ではなく
コンストラクタに移動させれば良いと思います。


また、先の実装だと、変数 YLables は Dictionary(Of Chart, Label) 型ですので、
1 つの Chart につき、1 つの Label という実装になっています。

たとえば、X 軸用のラベルと Y 軸用のラベルを 2 つ用意したいといった状況では、
XLables と YLabels として別々の変数で管理してみたり、あるいは、
Dictionary の Value 側をタプル、配列、List(Of Label) などにする手もありますね。


> 実行後一旦削除もできれば可能なようにも思うのですが、
今回は必要ないのでは?

削除する必要性があるとしたら、フォーム デザイナで Chart や Label を用意しておくのではなく、
プログラムから動的に Chart や Label を生成したり取り除いたりする場合だと思いますが、
今回はそういうわけでも無いでしょうし。
引用返信 編集キー/
■98554 / inTopicNo.3)  Re[2]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ゆい (26回)-(2021/11/30(Tue) 23:27:02)
No98553 (魔界の仮面弁士 さん) に返信

ありがとうございます。

> 既に Private Sub Form1_Load の中に書かれていますよね。

すみません、その中ではなくて
Private Sub 〇〇〇() の中に書いてもいるのです。

その訳は、VBなども普段全く触れることもないずぶ素人でも、
可能な限り後から見ても出来るだけ一目で分かるようにと、関連する機能はひと纏めにもしておきたいからです。
それでいて、欲深いのでしょうね。
ついつい色んな機能をも組み込んでもしまい、必然的にプログラムも随分と長文なのにもなってもいます。

>> 実行後一旦削除もできれば可能なようにも思うのですが、
> 今回は必要ないのでは?

またまたお騒がせしてしまいました。
If文で回避しようとも思うます。
たぶんそれが一番簡単な方法なのでしょうから。

引用返信 編集キー/
■98557 / inTopicNo.4)  Re[3]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3235回)-(2021/12/01(Wed) 10:30:02)
No98554 (ゆい さん) に返信
> Private Sub 〇〇〇()

こういう時、昔は "○" (丸記号) を使う人が多かった認識なのですが、
最近は "〇" (漢数字のゼロ) を使う人が増えているのは何故でしょうね。

※もしかして:じぇねれーしょんぎゃっぷ!

>>既に Private Sub Form1_Load の中に書かれていますよね。
> すみません、その中ではなくて
> Private Sub 〇〇〇() の中に書いてもいるのです。
> 可能な限り後から見ても出来るだけ一目で分かるようにと、関連する機能はひと纏めにもしておきたいからです。

その辺りは御随意に。
可読性向上のためにも、むしろやるべきでしょうね。

ただ、「Private Sub 自作メソッド()」を用意してそこから呼び出そうと、
そうした物を通さずにイベント内に直接記述していようと、
本質的な処理は同じことですよね……? エラーの要因はそこではないハズですよ。

先に述べた通り、複数回呼び出されるような場所で処理しなければよいという話なので、
コンストラクタに移動するだけで良いと思ったのですが、それでは駄目だったのでしょうか。


えぇと、そもそも「コンストラクタ」って分かりますかね?

No98525 のコードが使えたという事は、少なくとも VB2008 以下ではなく
最低でも VB2010 以降であるわけですよね。


VB2010 の場合、
・Form1 のコードエディタを開き、左上ボックスで "Form1" を選択し、右上ボックスで "New" を選択

VB2012 / 2013 / 2015 の場合
・確認できる環境が手元に無いので省略。

VB2017 の場合
・Form1 のコードエディタを開き、上部中央ボックスで "Form1" を選択し、上部右側ボックスで "新規作成" を選択
 (Visual Studio v16.10.0〜v16.10.2 の場合はうまく動作しないことがあるので、最新版への更新を推奨)

VB2019 / VB2022 の場合
・Form1 のコードエディタを開き、上部中央ボックスで "Form1" を選択し、上部右側ボックスで "New" を選択


これらを行うと、『Sub New()』というコンストラクタ宣言部が自動挿入されます。

Public Class Form1
  Public Sub New()

    ' この呼び出しはデザイナーで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後で初期化を追加します。

  End Sub
End Class


あとは、先の Dictionary 操作のために用意した「Private Sub 〇〇〇()」な
自作メソッドの呼び出し処理を、Load イベント内から削除して、
代わりに、コンストラクタ内の、InitializeComponent() 呼び出しの後に
移動させるという流れです。



> If文で回避しようとも思うます。
まぁ、そもそも二重に呼び出されるような場所で呼び出さなければ良いだけだと思いますが、
仮に If 文で判定するとしたら、
 If Not YLables.ContainsKey(Chart1) Then
  YLables.Add(Chart1, Label1)
 End If
などと書くことができるでしょうね。
No98525 で紹介した TryGetValue でも存在判定はできますが…アレだと回りくどいので。


ただ、登録内容が同じなわけですし、わざわざ If 文を使わずとも、
 YLables.Add(Chart1, Label1)

 YLables(Chart1) = Label1
の記法に変更するだけでも良さそうです。未登録なら Add 相当、既知なら上書き登録の意味になります。


あるいは御自身が書かれていたように、Clear で「一旦削除」する手もありますが…
いずれにせよ本質的には、『複数回の Load でキー競合を起こす』という事象なので、
 『Load 時ではなく、Load 前(コンストラクタなど)に処理すれば良い』
という状況だと思いますよ。 No98553 に書いたのはそういう話。
引用返信 編集キー/
■98560 / inTopicNo.5)  Re[4]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ゆい (27回)-(2021/12/02(Thu) 01:11:24)
No98557 (魔界の仮面弁士 さん) に返信

ありがとうございます。

> 最近は "〇" (漢数字のゼロ) を使う人が増えているのは何故でしょうね。

漢数字のゼロは知らないですが、日本語ではないからでしょうか??
ちなみにこのような英字の時は "*" も使ったりもしています。

> そもそも「コンストラクタ」って分かりますかね?

自慢ではないですが当然の如く初めて。
でも便利そうですね、機会あれば使ってみることにします。
ちなみに冒頭にもあるようにVB2017です。

>  YLables(Chart1) = Label1
> の記法に変更するだけでも良さそうです。未登録なら・・

良さそう、どろこかこれが一番有難いです。
もっとも、おっしゃるように「そもそも二重に呼び出されるような場所で呼び出さなければ良いだけ」なのではありますが。

ところで、Chart1、Chart2、Chart3と縦に配置したとします。
そこでマウスのあるChartには縦横の十字線、その他のChartには同じ縦位置に縦線のみ。
しかもLabelへの数量表示はChart1のLabel1のみ。
これを満たすべく下のように変更はしたものの、これではChart2、Chart3にマウスがある時にもLabel1に数量が表示もされてしまいます。
それでも格別困るってことでもないのですが、もしも簡単に対処できるようなことでもあればお教えもいただければ有難いです。

  Private Sub Charts_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Chart1.MouseMove, Chart2.MouseMove, Chart3.MouseMove
      'DirectCast(sender, System.Windows.Forms.DataVisualization.Charting.Chart).Invalidate()
      Chart1.Invalidate() : Chart2.Invalidate() : Chart3.Invalidate() 
  End Sub

引用返信 編集キー/
■98561 / inTopicNo.6)  Re[5]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3237回)-(2021/12/02(Thu) 09:50:57)
2021/12/02(Thu) 10:54:17 編集(投稿者)

No98560 (ゆい さん) に返信
> これではChart2、Chart3にマウスがある時にもLabel1に数量が表示もされてしまいます。

Chart2 の上にマウスが載っているときに、Char1 用の Label1 が更新されるのを避けたいのですね。

MouseMove 時にまとめて Invalidate していること自体は、ライン描画のための正しい実装だと思います。
その上で、Label への反映が問題になってしまうのは、 No98520 で御自身がお書きになった変数 ZaKa の算出処理部の実装によるものでしょう。


現状の実装だと、Y 軸が 0 以上の値のみを扱うチャートであったとして、
マウス座標が 0 未満の位置(プロットエリア外)を指していたときには、
ラベルを書き換えていますよね?
同様に、最大値を超える位置であっても書き換わっています。
そしてそれは、別の Chart 上にマウス座標があった時でも変わりません。

先の算出式では、Minimum と Maximum の相対量から、マイナス値を算出して
変数 ZaKa に代入し、それをそのまま Label に表示されていましたよね。
見直すべきはソコです。

つまり、今回の目的を果たすなら、If ステートメントを使って
 「マウス座標が範囲外だったら Label を更新しない(あるいは空欄とする)」
という実装にすることで、簡単に実装できるでしょう。
そうすれば、Chart2 の上にマウスが載っているときに、Char1 用の Label1 が更新される事象を解消できるはずです。

Label が更新される座標範囲を、それぞれの Chart 全体とすることもできますし、
あるいは各 Chart のプロットエリア内だけを対象とすることもできるでしょうね。


>>そもそも「コンストラクタ」って分かりますかね?
> 自慢ではないですが当然の如く初めて。
> でも便利そうですね、機会あれば使ってみることにします。

Form1 のコード中に、直接「Public Sub New()」と書いて Enter した場合でも同じものが作られます。
コンストラクタは、『オブジェクトが生成される時に一度だけ呼び出される処理』であり、
Load イベントのような再入が起こりません。Load と使い分けてみてください。


ちなみに、Form のコンストラクタ中に自動で用意される
 ' この呼び出しはデザイナーで必要です。
 InitializeComponent()
と記述されている行は、フォームデザイナーで設定した内容を適用する処理です。

InitializeComponent の部分を右クリックして [定義へ移動] を選択すると、
Form1.designer.vb の該当行が表示されます。それを見ると、デザイナーによって
自動生成された Chart や Label 等の情報が並んでいることを確認できるかと思います。

InitializeComponent が呼び出されるまでは、コントロールはまだ配置されていません。
そのため、今回の YLables への登録を行う場合には、必ずその前に
InitializeComponent が呼び出されている必要があることに注意しましょう。これが先の回答で
「コンストラクタ内の InitializeComponent() 呼び出しの『後』に移動させる」と書いた所以です。



>>最近は "〇" (漢数字のゼロ) を使う人が増えているのは何故でしょうね。
> 漢数字のゼロは知らないですが、日本語ではないからでしょうか??

伏字部分を「まるまる」などと読んでいる人であれば、丸記号の方が自然だと思うのですが、
そもそも「まるまる」という読み方がマイナーだったりするのかな…と思いましてね。

たとえば「Private Sub 〇〇〇()」を「プライベート サブ ゼロゼロゼロ」と
読んでいる人なら、○ (丸記号)ではなく、〇 (ゼロ)の文字を使う方が自然なわけで。

※関東圏の昔の TV 番組に、「午後は○○(ごごはまるまる)」ってのがあったので
 自分の認識が マルマル 読みに引っ張られていているのかもしれないと思ってみたり。
引用返信 編集キー/
■98562 / inTopicNo.7)  Re[6]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3238回)-(2021/12/02(Thu) 09:58:10)
No98561 (魔界の仮面弁士) に追記
> Label への反映が問題になるのは、 No98520 で御自身がお書きになった変数 ZaKa の算出処理のせいでしょう。
> 現状の実装だと、Y 軸が 0 以上の値のみを扱うチャートであったとして、
> マウス座標が 0 未満の位置(プロットエリア外)を指していたときには、
> ラベルを書き換えていますよね? あるいは最大値を超える位置であっても書き換わっています。

もし、プロットエリア外での Label 更新を止めたいなら
No98525 で用意した

 Private Function GetYValue(yAxis As Axis, y As Integer) As Double
  Dim y1 = yAxis.ValueToPixelPosition(yAxis.Maximum)
  Dim y2 = yAxis.ValueToPixelPosition(yAxis.Minimum)
  Return yAxis.Maximum - (yAxis.Maximum - yAxis.Minimum) * ((y - y1) / (y2 - y1))
 End Function

の処理を

 Private Function GetYValue(yAxis As Axis, y As Integer) As Double?
  Dim y1 = yAxis.ValueToPixelPosition(yAxis.Maximum)
  Dim y2 = yAxis.ValueToPixelPosition(yAxis.Minimum)
  If y1 <= y AndAlso y <= y2 Then
   Return yAxis.Maximum - (yAxis.Maximum - yAxis.Minimum) * ((y - y1) / (y2 - y1))
  Else
   Return Nothing
  End If
 End Function

に変更し、さらに、Label への表示部を
 yLabel.Text = GetYValue(e.Chart.ChartAreas(0).AxisY, mousePoint.Y).ToString("N0")
から
 yLabel.Text = GetYValue(e.Chart.ChartAreas(0).AxisY, mousePoint.Y)?.ToString("N0")
などとすれば良いでしょう。


上記では、ラベルが更新されるエリアをプロットエリア内に限定していますが、
判定範囲を変更すれば、それぞれのチャート全体を対象にすることもできますね。
引用返信 編集キー/
■98564 / inTopicNo.8)  Re[7]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ゆい (28回)-(2021/12/02(Thu) 23:53:44)
No98561
No98562 (魔界の仮面弁士 さん) に返信

長文ありがとうございます。

何とか理解は出来ても行い難し。
そんな気もしなくはないですが、その節にはトライしてみようと思います。

> ○ (丸記号)ではなく、〇 (ゼロ)
色んな認識があるもんですね。

> Private Function GetYValue(yAxis As Axis, y As Integer) As Double?
> yLabel.Text = GetYValue(e.Chart.ChartAreas(0).AxisY, mousePoint.Y)?.ToString("N0")
この "?" は何なのでしょう?
それは兎も角として理想のようには作動しました。
引用返信 編集キー/
■98566 / inTopicNo.9)  (削除)
□投稿者/ -(2021/12/03(Fri) 10:38:32)
この記事は(投稿者)削除されました
引用返信 編集キー/
■98569 / inTopicNo.10)  Re[8]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3242回)-(2021/12/03(Fri) 10:56:44)
No98564 (ゆい さん) に返信
> この "?" は何なのでしょう?
それぞれ意味が異なりますが、いずれも Nothing のための構文です。

「As Double?」は、VB2008 以降で利用可能な構文で、『Null 許容値型』のためのものです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/nullable-value-types?WT.mc_id=DT-MVP-8907

「?.ToString("N0")」は VB2015 以降の機能で、『Null 条件メンバーアクセス』と呼ばれます。
(あるいは『Null 条件演算子』)
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/null-conditional-operators?WT.mc_id=DT-MVP-8907


>> Private Function GetYValue(yAxis As Axis, y As Integer) As Double?
「y 座標がプロットエリア外ならば Nothing を返す」
「y 座標がプロットエリア内なら、その座標が示す Y 軸の小数値を返す」
という意味です。

VB2005 の場合は、「As Nullable(Of Double)」と書けば同じ意味になります。
VB.NET 2002/2003 世代が相手の場合は、「As Object」を使って代用できます。


>> yLabel.Text = GetYValue(……)?.ToString("N0")
GetValue から Nothing が返された場合には、
その後の ToString は呼ばれず、yLabel.Text に Nothing がセットされます。

GetValue から小数値 が返された場合には、ToString("N0") が実行されて
N0 書式(小数点なしの 3 桁区切り表記)に整形された文字列がセットされます。


この場合の動作としては、
 Dim d = GetYValue(……)
 If d Is Nothing Then
  yLabel.Text = Nothing
 Else
  yLabel.Text = CDbl(d).ToString("N0")
 End If
に近いイメージ。
引用返信 編集キー/
■98570 / inTopicNo.11)  Re[9]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ 魔界の仮面弁士 (3243回)-(2021/12/03(Fri) 10:56:56)
2021/12/03(Fri) 13:17:06 編集(投稿者)

No98569 (魔界の仮面弁士) に追記
> 「As Double?」は、VB2008 以降で利用可能な構文で、『Null 許容値型』のためのものです。
> https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/nullable-value-types?WT.mc_id=DT-MVP-8907

「As Nullable(Of T)」自体は VB2005 からサポートされましたが(.NET Framework 2.0 以上)、
それを「As T?」と省略表記できるようになったのは VB2008 からです。


御存知かどうか分からなかったので、一応説明しておきますが、
すべてのデータ型は、「値型」と「参照型」の二種類いずれかに大別できます。

構造体(Structure)や列挙型(Enum)は「値型」に分類されます。
配列やクラス(Class)やインターフェイス(Interface)は「参照型」です。


たとえば、下記の 3 つは値型です。Interger も Date も Color も構造体です。
 Dim x1 As Integer = 98564
 Dim x2 As Date = #2021/12/02 23:53:44#
 Dim x3 As Color = Color.Red

こちらの 3 つは参照型です。String も XElement も Brush もクラスです。
 Dim y1 As String = "98564"
 Dim y2 As XElement = <投稿者>ゆい</投稿者>
 Dim y3 As Brush = Brushes.Red

それぞれの変数に Nothing を代入し、その変数のメソッドを呼び出してみます。

まずは参照型。
この場合、System.NullReferenceException の例外になってしまいます。
 y3 = Nothing
 Label1.Text = y3.ToString() '←実行時エラー

一方、値型に対して同じ処理を行ってみても、NullReferenceException にはなりません。
 x3 = Nothing
 Label1.Text = x3.ToString() '←"Color [Empty]"


参照型の変数が Nothing である状態とは、参照すべきオブジェクトが存在しない状態を意味します。
存在しないオブジェクトの ToString を呼び出せるはずがないので、エラーになります。
そのため参照型では、「変数の中身が Nothing かどうか」を調べるために
 If y3 Is Nothing Then
 If IsNothing(y3) Then
などの構文を使って、Nothing かどうかを先に判断し、.ToString 出来るかどうかを見極めねばなりません。

でも毎回チェックするのは面倒ですよね。そこで VB2015 以降にて
> 「?.ToString("N0")」は VB2015 以降の機能で、『Null 条件メンバーアクセス』と呼ばれます。
> (あるいは『Null 条件演算子』)
> https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/null-conditional-operators?WT.mc_id=DT-MVP-8907
という糖衣構文が追加されました。これにより、
 'y3 が Nohing 以外なら ToString された文字列が渡される
 'y3 が Nothing の場合は Nothing な文字列が渡される
 Label1.Text = y3?.ToString()
のように、Nothing 判定を簡略して、一行で処理できるようになったのです。


さて、上記は参照型の例でしたが、値型の場合、変数に書き込まれているのは
オブジェクトへの参照情報ではなく実際のデータそのものです。
そして値型にとっての Nothing の振る舞いとは、
「x1 = Nothing」は「x1 = 0」と同義ですし、
「x2 = Nothing」は「x2 = Date.MinValue」と同義ですし、
「x3 = Nothing」は「x3 = Color.Empty」と同義です。

また、値型が相手の場合には
 If x3 Is Nothing Then '値型に Is 演算子は使えないので構文エラー
 If IsNothing(x3) Then '値型に Nothing 状態は存在しないので、常に False
となります。

そして『Null 許容値型』とは、この中間にあたる存在です。
要するに「Nothing 状態を保持することが可能な値型」。

Dim a As Integer = Nothing 'a は 0 になる
Dim b As Integer?= Nothing 'b は Notihng になる
Dim c = a + b '0 + <Nothing> の演算結果は <Nothing>
b = 123
c = a + b  '0 + 123 の演算結果は 123


なお、末尾に ? を付与できるのは、値型だけです。
参照型は元から Nothing を保持できますので、? 付な型とすることはできません。

Dim c As String = Nothing 'c は Nothing になる
Dim d As String?= Nothing 'コンパイル エラー
引用返信 編集キー/
■98572 / inTopicNo.12)  Re[10]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ビール呑み (2回)-(2021/12/03(Fri) 19:24:10)
横から、かつ横道失礼します。

> こういう時、昔は "○" (丸記号) を使う人が多かった認識なのですが、
> 最近は "〇" (漢数字のゼロ) を使う人が増えているのは何故でしょうね。

たぶんIMEの仕様変更が影響しているのではないでしょうか。
今現在、MS-IMEの日本語入力で「まる」を変換しようとすると、候補に「〇[漢数字]」が出てきますが
以前は出なかったと記憶しています。

2年前ぐらいからかな…?
引用返信 編集キー/
■98573 / inTopicNo.13)  Re[10]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ゆい (29回)-(2021/12/03(Fri) 23:24:42)
No98570 (魔界の仮面弁士 さん) に返信

教えてくださる熱意のほどは凄く分かるのですが、当然といえば当然のことながら、あまりにもレベルの違いに歴然。
すべてを理解するにはまだまだ先のようです。

Chartを縦に3枚、それを2列にもしますとまた違ったLabelへの表示にもなるのですが、
そこまでとなると、また複層(複雑)にもなって来ますので、これにて解決済みとさせていただきます。

ありがとうございました。
これに懲りずにまたお願いしますね。


解決済み
引用返信 編集キー/
■98574 / inTopicNo.14)  Re[11]: 「複数のChartでのマウス位置による数量表示」の追加です
□投稿者/ ゆい (30回)-(2021/12/03(Fri) 23:29:29)
No98572 (ビール呑み さん) に返信
> 横から、かつ横道失礼します。
>
>>こういう時、昔は "○" (丸記号) を使う人が多かった認識なのですが、
>>最近は "〇" (漢数字のゼロ) を使う人が増えているのは何故でしょうね。
>
> たぶんIMEの仕様変更が影響しているのではないでしょうか。
> 今現在、MS-IMEの日本語入力で「まる」を変換しようとすると、候補に「〇[漢数字]」が出てきますが
> 以前は出なかったと記憶しています。
>
> 2年前ぐらいからかな…?

レス違いなのかもしれませんが、おっしゃるように「まる」を変換してました。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -