C# 创建每次单击时更改字符串值的按钮
我想创建一个按钮,每当我在C#中单击时,它都会更改字符串值 这是我的C#代码:C# 创建每次单击时更改字符串值的按钮,c#,C#,我想创建一个按钮,每当我在C#中单击时,它都会更改字符串值 这是我的C#代码: 如果单击开关按钮,字符串值将从ja和更改为en。但是,如果我再次单击,则没有任何更改。我的代码有什么问题?为了清晰起见,我建议使用枚举 public enum Language { En_Ja, Ja_En } Language lang = Language.En_Ja; public void Switch(object sender, EventArgs e) { lang =
如果单击开关按钮,字符串值将从ja和更改为en。但是,如果我再次单击,则没有任何更改。我的代码有什么问题?为了清晰起见,我建议使用
枚举
public enum Language {
En_Ja,
Ja_En
}
Language lang = Language.En_Ja;
public void Switch(object sender, EventArgs e) {
lang = lang == Language.En_Ja ? Language.Ja_En : Language.En_Ja;
}
简短答复:
HTTP请求需要初始化from
和to
字段。比如:
partial class Translator : Page
{
string from, to;
protected override void OnLoad(EventArgs e)
{
var to = Context.Request.QueryString["to"];
var from = Context.Request.QueryString["from"];
switch(from.ToUpper())
{
case "EN": { this.from = "en"; break; }
case "JA": { this.from = "ja"; break; }
}
switch(to.ToUpper())
{
case "EN": { this.to = "en"; break; }
case "JA": { this.to = "ja"; break; }
}
if(to == null) throw new Exception();
if(from == null) throw new Exception();
}
}
protected override void OnLoad(EventArgs e)
{
var from = Context.Request.QueryString["from"];
switch(from.ToUpper())
{
case "EN": { lang = LanguageSetting.English; break; }
case "JA": { lang = LanguageSetting.Japanese; break; }
}
if(lang == null) throw new Exception();
}
详细回答:
这实际上是多态性的一个很好的用例:
/* C# 7 syntax */
abstract class LanguageSetting
{
public static LanguageSetting English = JA.alt;
public static LanguageSetting Japanese = EN.alt;
public abstract LanguageSetting Alternate { get; }
public abstract override string ToString();
sealed class EN : LanguageSetting
{
public static readonly LanguageSetting alt = new JA();
public override LanguageSetting Alternate => alt;
public override string ToString() => "en";
}
sealed class JA : LanguageSetting
{
public static readonly LanguageSetting alt = new EN();
public override LanguageSetting Alternate => alt;
public override string ToString() => "js";
}
}
然后您的Submit()
和Switch
方法就是:
void Submit(object Sender, EventArgs e)
{
string from = lang.ToString();
string to = lang.Alternate.ToString();
string uri = "https://api.microsofttranslator.com/v2/Http.svc/Translate?text=" +
HttpUtility.UrlEncode(text) + "&from=" + from1 + "&to=" + to1;
}
及
最后,我们用如下方式初始化:
partial class Translator : Page
{
string from, to;
protected override void OnLoad(EventArgs e)
{
var to = Context.Request.QueryString["to"];
var from = Context.Request.QueryString["from"];
switch(from.ToUpper())
{
case "EN": { this.from = "en"; break; }
case "JA": { this.from = "ja"; break; }
}
switch(to.ToUpper())
{
case "EN": { this.to = "en"; break; }
case "JA": { this.to = "ja"; break; }
}
if(to == null) throw new Exception();
if(from == null) throw new Exception();
}
}
protected override void OnLoad(EventArgs e)
{
var from = Context.Request.QueryString["from"];
switch(from.ToUpper())
{
case "EN": { lang = LanguageSetting.English; break; }
case "JA": { lang = LanguageSetting.Japanese; break; }
}
if(lang == null) throw new Exception();
}
您是否也在Page_Load事件中设置了这两个文本?您是否在下面保护了此设置!IsPostback?我不确定页面加载事件是什么以及IsPostback设置。我没有设置任何内容。如何初始化from
和to
字段?他们不应该从请求本身获取初始值吗?它是&
,而不是&
。同意,除了@Edwin Surya之外,还应该使用属性而不是公共字段。有关更多信息,请参阅。我不同意。我认为对于给定的上下文,awome先生的解决方案更具可读性。在给定的示例中,他只表明他想要“ja”和“en”的倒装。