16

几周前我开始使用 Xamarin Studio,但找不到下一个问题的解决方案:创建了一个包含序列号的编辑文本。我想在Enter按下后运行一个函数。它工作正常,当我按下时Enter,该功能运行没有失败,但我无法修改编辑文本的内容(我无法输入)。

编码:

EditText edittext_vonalkod = FindViewById<EditText>(Resource.Id.editText_vonalkod);
edittext_vonalkod.KeyPress += (object sender, View.KeyEventArgs e) =>
{
    if ((e.Event.Action == KeyEventActions.Down) && (e.KeyCode == Keycode.Enter))
    {
        //Here is the function
    }
};

这是控件的代码:

<EditText
    p1:layout_width="wrap_content"
    p1:layout_height="wrap_content"
    p1:layout_below="@+id/editText_dolgozo_neve"
    p1:id="@+id/editText_vonalkod"
    p1:layout_alignLeft="@+id/editText_dolgozo_neve"
    p1:hint="Vonalkód"
    p1:text="1032080293"
    p1:layout_toLeftOf="@+id/editText_allapot" />

我尝试使用edittext_vonalkod.TextCanged它的论点,保留问题。我可以修改内容但无法处理Enter密钥。

谢谢!

4

5 回答 5

19

最好的方法是使用设计为在按键EditorAction时触发的事件。Enter这将是这样的代码:

edittext_vonalkod.EditorAction += (sender, e) => {
    if (e.ActionId == ImeAction.Done) 
    {
        btnLogin.PerformClick();
    }
    else
    {
        e.Handled = false;
    }
};

并且能够更改在您的 XML 上Enter使用的按钮的文本:imeOptions

<EditText
    p1:layout_width="wrap_content"
    p1:layout_height="wrap_content"
    p1:layout_below="@+id/editText_dolgozo_neve"
    p1:id="@+id/editText_vonalkod"
    p1:layout_alignLeft="@+id/editText_dolgozo_neve"
    p1:hint="Vonalkód"
    p1:text="1032080293"
    p1:layout_toLeftOf="@+id/editText_allapot" 
    p1:imeOptions="actionSend" />
于 2014-11-22T16:36:40.270 回答
5

当按下的键为 ENTER 时,您需要将事件标记为未处理。将以下代码放入您的 KeyPress 处理程序中。

if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter) 
{
   // Code executed when the enter key is pressed down
} 
else 
{
   e.Handled = false;
}
于 2013-05-20T17:45:49.173 回答
3

尝试这个:



    editText = FindViewById(Resource.Id.editText);    
    editText.KeyPress += (object sender, View.KeyEventArgs e) => 
    {
        e.Handled = false;
        if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter)
        {
            //your logic here
            e.Handled = true;
        }
    };

于 2015-10-27T15:22:57.577 回答
1

更好的是为 EditText (EditTextExtensions.cs) 创建可重用的扩展:

public static class EditTextExtensions
{
    public static void SetKeyboardDoneActionToButton(this EditText editText, Button button)
    {
        editText.EditorAction += (sender, e) => {
            if (e.ActionId == ImeAction.Done)
            {
                button.PerformClick();
            }
            else
            {
                e.Handled = false;
            }
        };
    }
}
于 2016-09-08T09:26:49.320 回答
-1
 editText.KeyPress += (object sender, View.KeyEventArgs e) =>
            {
                    if ((e.KeyCode == Keycode.Enter))
                    {
                       // `enter code here`
                    }
            };
于 2018-05-24T06:18:54.827 回答