VS2022 C# Xamarinのコントロール配置と使用方法

タグの編集
投稿者 (削除されました)  () 投稿日時 2024/3/4 17:41:31
(削除されました)
投稿者 kojiro  (社会人) 投稿日時 2024/3/4 17:45:37
いつも大変お世話になっております。
c#でのXamarinの使用について、教えていただきたく存じます。
以下のようにプロジェクトを作成しました。




最後の画像で、ボタンや新しいコントロールを配置すると、 @stringリソースを使用する必要があります と警告されます。
そもそも、C#のコードのところで、コントロール作成等、できないでしょうか?
したいことは、WindowsアプリのPictureBoxに該当するものを設置して、その中のPointに対して、C#で、線を描いたり、またタッチしたときのイベントを作成したいです。
よろしくお願いいたします。
投稿者 kojiro  (社会人) 投稿日時 2024/3/4 17:52:26
https://www3.tvt.ne.jp/~kojiro_i/newpage1.html
に画像が、貼ってあります。
よろしくお願いいたします。
投稿者 (削除されました)  () 投稿日時 2024/3/5 09:58:56
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2024/3/5 10:00:05
おっ。Xamarin ですか。今は後継となる .NET MAUI への置き換えが進んでおり、
現在は Xamarin プロジェクトを開くと、アップグレード警告が出るようになっているんですよね。

Xamarin プロジェクトのサポートは、2024 年 5 月 1 日に終了します。Xamarin プロジェクトを .NET に今すぐアップグレードしてください。
https://learn.microsoft.com/ja-jp/dotnet/maui/migration/?WT.mc_id=DT-MVP-8907&view=net-maui-8.0



> そもそも、C#のコードのところで、コントロール作成等、できないでしょうか?
今回は C# のコードが問題視されているのではなく、XAML に関する警告になります。
android:text="B̳u̳t̳t̳o̳n̳" の箇所で警告表示されていますよね。
貼り付けた直後は、暫定的な埋め込み文字列になっていますが、それをリソース指定の記述に切り替えるようにという TODO 的な警告です。

> 文字列 "Button" がハードコードされました。 @string リソースを使用する必要があります。
@string resource とは、文字列を定義するために用意されている strings.xml ファイルのことを指します。
hardcode とは、strings.xml を使わずに直接文字列を書いていることを指しています。

strings.xml はここにあります。


strings.xml を開いたら、<resources> タグの下に、たとえば下記を加えます。
<string name="kojiro">Hello world!</string>


そうしたら XAML 画面に戻って
 android:text="Button"
の箇所を
 android:text="@string/kojiro"
にします。これで警告が消えることでしょう。
アットマークを打ち始めたところで、Visual Studio の IntelliSense が入力候補を示してくれるはずです。

Android リソースの管理について、下記も参照してみてください。
https://learn.microsoft.com/ja-jp/xamarin/android/app-fundamentals/resources-in-android/android-resource-basics?WT.mc_id=DT-MVP-8907&tabs=windows


> https://www3.tvt.ne.jp/~kojiro_i/newpage1.html
>に画像が、貼ってあります。
先のリンクミスのものとは、画像ファイル名が違っているようですね。 (誤:xam ⇒ 正:zam)
一応再掲載しておきます。



投稿者 kojiro  (社会人) 投稿日時 2024/3/5 14:59:14
string.xmlに、いわれたとおり
<string name="kojiro">Hello kojiro !</string>を追加し、buttonのtextに"@string/kojiro"をいれましたが、

のように、
このリソースURLを解決できません の警告で、Hello Kojiro !は表示されません。空のアプリを選択して(特別な意味なし)、やってますが、そもそも最初から、上の表示が、@string/app_nameです。リソースでは<string name="app_name">test_3_5</string>です。
投稿者 kojiro  (社会人) 投稿日時 2024/3/5 15:02:54
リビルドで、表示されるようになりました。
投稿者 kojiro  (社会人) 投稿日時 2024/3/5 15:16:00
このボタンのクリック時に、
 public void pulus()
 {
     System.Diagnostics.Debug.WriteLine("OK");
 }
を実行させるには、どうするのでしょうか?
投稿者 kojiro  (社会人) 投稿日時 2024/3/5 16:11:41
一応の解決、ありがとうございます。
コントロールの使用については、少し本で、勉強いたします。
ありがとうございました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2024/3/5 16:22:26
> 実行させるには、どうするのでしょうか?
OnCreate 内に既に書かれている FabOnClick のコードは参考になりませんでしたか?

既存の fab.Click += FabOnClick; という行の下に続けて、このように書きます。
FindViewById<View>(Resource.Id.button1).Click += (sender, e) => pulus();
引数定義が EventHandler デリゲートと同じメソッドであれば、直接割り当てることもできます。
FindViewById<View>(Resource.Id.button1).Click += button1_Cllick



別の方法としては、content_main.xml の <Button> に対して「android:onClick="buttton1Click"」を加えておく方法もあります。
この場合は参照設定に Java.Interop を加えたうえで、イベントハンドラに Export 属性を付与します。
[Java.Interop.Export("button1Click")]
private void button1Click(View v)
{
    System.Diagnostics.Debug.WriteLine("event");
}



> public void pulus()
pulse (パルス) でも plus (プラス) でもない…?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2024/3/5 16:35:23
おっと、button1_Click と書いたつもりが、button1_Cllick になってる…。orz

> 引数定義が EventHandler デリゲートと同じメソッドであれば、直接割り当てることもできます。
これはつまり、void button1_Click(object sender, EventsArgs e) ということです。

android:onClick の方なら、引数は 1 つ(Android.Views.View) です。
投稿者 kojiro  (社会人) 投稿日時 2024/3/5 21:16:54
記述する場所について、大変参考になりました。
>android:onClick の方なら、引数は 1 つ(Android.Views.View) です。
については、今後参考にしたいと存じます。