C#安卓Xamarin-if-else语句不起作用
本文关键字:不起作用 语句 Xamarin-if-else 安卓 | 更新日期: 2023-09-27 18:23:46
我在C#代码中使用的if-else语句有问题。目前,我正在MS Visual Studio中使用Xamarin构建一个应用程序。我希望事件"uitrekenen"检查这三个编辑对象是否真的有值。如果没有,我希望对象"totaalTekst"显示一条消息,比如:"请填写所有内容。"或其他什么。当我在手机上调试代码时,我会收到一个错误。这个错误一定与事件"uitrekenen"有关,因为如果没有这个事件(正如你在这里看到的),我不会得到任何错误。代码可能有点混乱,因为我对对象使用了荷兰语名称。我希望这里的任何人都知道问题出在哪里!我感谢你的帮助,如果我的问题有什么不清楚的地方;请问!
这是代码:我的问题特别涉及最后一部分,包含事件"uitrekenen"。
using Android.OS; // vanwege Bundle
using Android.App; // vanwege Activity
using Android.Widget; // vanwege TextView
using Android.Graphics; // vanwege Color
using System;
[ActivityAttribute(Label = "Leeftijd", MainLauncher = true)]
public class LeeftijdApp : Activity
{
EditText dagEdit;
EditText maandEdit;
EditText jaarEdit;
TextView totaalTekst;
protected override void OnCreate(Bundle b)
{
base.OnCreate(b);
TextView dagVerzoek;
dagVerzoek = new TextView(this);
dagVerzoek.Text = "DD:";
TextView maandVerzoek;
maandVerzoek = new TextView(this);
maandVerzoek.Text = "MM:";
TextView jaarVerzoek;
jaarVerzoek = new TextView(this);
jaarVerzoek.Text = "JJJJ:";
dagEdit = new EditText(this);
maandEdit = new EditText(this);
jaarEdit = new EditText(this);
Button knop;
knop = new Button(this);
knop.Text = "Klik hier!";
totaalTekst = new TextView(this);
totaalTekst.Text = "Hallo daar!";
knop.Click += uitrekenen;
LinearLayout stapel;
stapel = new LinearLayout(this);
stapel.Orientation = Orientation.Vertical;
stapel.AddView(dagVerzoek);
stapel.AddView(dagEdit);
stapel.AddView(maandVerzoek);
stapel.AddView(maandEdit);
stapel.AddView(jaarVerzoek);
stapel.AddView(jaarEdit);
stapel.AddView(knop);
stapel.AddView(totaalTekst);
this.SetContentView(stapel);
}
protected void uitrekenen(object o, EventArgs ea)
{
if (dagEdit != null && maandEdit != null && jaarEdit != null)
{
int DD = int.Parse(dagEdit.Text);
int MM = int.Parse(maandEdit.Text);
int JJJJ = int.Parse(jaarEdit.Text);
}
else
{
totaalTekst.Text = "Vul alle waarden in!";
}
}
}
首先,请求帮助却不翻译英语代码是个笑话。但还好
您的代码将因以下行而崩溃:
int.Parse(tfEdit.Text);
int.Parse在输入不可解析时抛出异常,如果你不想捕获异常,可以使用int.TryParse
因为方法uitrekenen在主线程上执行,并且您没有在该方法中捕获任何异常,所以主线程将有一个未处理的异常,这将使应用程序崩溃。
因此,解决方案是使用这两种解决方案之一:
try{
int DD = int.Parse(dagEdit.Text);
int MM = int.Parse(maandEdit.Text);
int JJJJ = int.Parse(jaarEdit.Text);
}catch(Exception ex){
//do whatever you want with your exception
}
或
int DD,MM,JJJJ;
int.TryParse(dagEdit.Text,DD);
int.TryParse(maandEdit.Text,MM);
int.TryParse(jaarEdit.Text,JJJJ);
此外,您不应该检查textfield对象是否为null,因为您知道它们已初始化,但您应该检查空的.Text属性
if (dagEdit != null && maandEdit != null && jaarEdit != null) {...}
您检查对象,但需要检查值。
像这样:
if (dagEdit.Text != "" ...) {...}