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

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

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

Re[4]: LabelやTextBoxのnameプロパティ


(過去ログ 120 を表示中)

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

■70246 / inTopicNo.1)  LabelやTextBoxのnameプロパティ
  
□投稿者/ fullhappy (11回)-(2014/03/04(Tue) 13:40:01)

分類:[C#] 

VS2010 or VS2012です。

LabelやTextBoxのnameに“・”や半角中点を使用すると
「識別子 'xxx・xxx' は有効ではありません。」とエラーとなります。
変数名ではエラーになりません。

  string PC・携帯メールアドレス;

LabelやTextBoxで使えない文字は何で決まるのでしょうか?

よろしくお願いします。

引用返信 編集キー/
■70248 / inTopicNo.2)  Re[1]: LabelやTextBoxのnameプロパティ
□投稿者/ 魔界の仮面弁士 (554回)-(2014/03/04(Tue) 14:33:37)
No70246 (fullhappy さん) に返信
> LabelやTextBoxで使えない文字は何で決まるのでしょうか?

Unicode カテゴリが影響してくるようです。
http://support.microsoft.com/kb/948575/ja
引用返信 編集キー/
■70252 / inTopicNo.3)  Re[2]: LabelやTextBoxのnameプロパティ
□投稿者/ fullhappy (14回)-(2014/03/04(Tue) 15:31:15)
No70248 (魔界の仮面弁士 さん) に返信
> ■No70246 (fullhappy さん) に返信
>>LabelやTextBoxで使えない文字は何で決まるのでしょうか?
>
> Unicode カテゴリが影響してくるようです。
> http://support.microsoft.com/kb/948575/ja

魔界の仮面弁士さん、ありがとうございます。

中点のカテゴリが"Pc"から"Po"になったので使えなくなった。
変数で使えてしまうのはコンパイラかなにかの不具合。

この認識でよろしいでしょうか?

しかし、変数が見やすくなるので
ライブラリも含め、ずっと使ってしまっていました。
残念です。
引用返信 編集キー/
■70253 / inTopicNo.4)  Re[3]: LabelやTextBoxのnameプロパティ
□投稿者/ 魔界の仮面弁士 (555回)-(2014/03/04(Tue) 16:07:53)
2014/03/04(Tue) 17:01:20 編集(投稿者)

No70252 (fullhappy さん) に返信
> 中点のカテゴリが"Pc"から"Po"になったので使えなくなった。
> 変数で使えてしまうのはコンパイラかなにかの不具合。

中点が識別子として使えないのは、Visual Studio 側の制限だと思います。

たとえば、.NET Framework 的には、フォーム上の複数のコントロールに
同じ Name をつける事が許可されていますが、Visual Studio では
重複する Name を与えられません。これも VS 側の制限ですね。


C# 側としての識別子の制限は、以下のようになっています。
・UAX #15 準拠
・アンダースコアで始めることもできる。アンダースコア単独でも可。
・予約語やキーワードを識別子とする場合は、先頭にプリフィックス @ を補う必要がある。
・識別子の中で Unicode エスケープシーケンスを使用できる
・以下の文字クラスが利用可能
 ・letter-character: Lu、Ll、Lt、Lm、Lo、Nl
 ・combining-character: Mn、Mc
 ・dicimal-digit-character: Nd
 ・connecting-character: Pc
 ・formatting-character: Cf

Pc はありますが、Po は無いですね。
というか漢字やカナが含まれていないような…?



ちなみに Visual Basic 側も、ほぼ同様の制限となるようです。
予約語が異なるとか、大文字小文字を区別するかどうかといった違いはありますが。
・UAX #15 準拠
・アンダースコアで始めることもできるが、その場合、他の文字を 1 文字以上含める必要がある。
・予約語やキーワードを識別子とする場合は、角かっこで囲ったエスケープ識別子とする必要がある。
・長さが 1023 文字を超えない。

その他、下記のような表記も見つけました。
やはり、漢字やカナは記載されていません。
http://msdn.microsoft.com/ja-jp/library/81ed9a62.aspx

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VB\Specifications\1041\Visual Basic Language Specification.docx"

・AlphaCharacter: Lu, Ll, Lt, Lm, Lo, Nl
・NumericCharacter: Nd
・CombiningCharacter: Mn, Mc
・FormattingCharacter: Cf
・UnderscoreCharacter: Pc
・IdentifierOrKeyword: 識別子 または キーワード



関連情報として、文字列リテラル中の全角ダブルクォートの問題もあります。
 Text = "”"; // C#系
 Text = "”" ' VB系

この構文は、本来であれば
 C# :問題なし。「”」と認識される。
 VBScript:問題なし。「”」と認識される。
 VB.NET :コンパイルエラーBC30648(閉じていない文字列リテラル)
と処理されます。VB.NET だと動作しないわけです。

ところが、Visual Studio (.NET 版のほか、VBA や VB6 も同様)の IDE は、
これを Text = """" に自動補正して、「"」として処理してしまいます。


> しかし、変数が見やすくなるので
> ライブラリも含め、ずっと使ってしまっていました。
単語を区切ることができるのであれば、中点であることには
こだわりませんか? であれば、「_」や「_」などといった
Pc カテゴリの文字で代用してみてください。
http://www.fileformat.info/info/unicode/category/Pc/list.htm

実際、Visual Studio のコードジェネレータは、そうした文字を
「_」に置き換えてコード化するようになっているようです。
引用返信 編集キー/
■70256 / inTopicNo.5)  Re[4]: LabelやTextBoxのnameプロパティ
□投稿者/ Hongliang (180回)-(2014/03/04(Tue) 16:35:15)
2014/03/04(Tue) 16:37:15 編集(投稿者)
> 中点のカテゴリが"Pc"から"Po"になったので使えなくなった。
> 変数で使えてしまうのはコンパイラかなにかの不具合。

C#的には識別子として Pc は有効・Po は無効なんですが、
C# 4.0の仕様書を読むと文字クラスはUnicode 3.0を参照してるんですね。
Unicode 3.0時代は中点は Pc だったので、
少なくともC# 4.0では使えるのが正しい動作です。

ちょっと調べたところ、Unicode 2.1で Po から Pc に移動して、
Unicode 4.1で再び Pc から Po に戻ったってことでいいのかな。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -