我的C#莫尔斯转换器需要一个计时器

时间:2017-11-06 09:56:03

标签: c# timer

我正在尝试开发一个将文本转换为莫尔斯代码的应用程序,反之亦然。我只是设法完成了第一阶段,这意味着当你输入一个字符时,你会看到该字符的编码类型。 但在第二阶段,我遇到了一些问题: 这是我的代码:(提示:sw =第一个秒表,flagsw =第二个秒表,数据=数据集,dbc =数据库转换器,listofcode ='。'和' - ')

private void txtletters_KeyDown(object sender, KeyEventArgs e)
{
    txtletters.BackColor = Color.Yellow;
    sw.Start();
    if (flagsw.ElapsedMilliseconds > 400)
    {
        datas = dbc.srchfortext(listofcode);
        lbltext.DataBindings.Clear();
        lbltext.DataBindings.Add("text", datas, "t.letter");
        txtletters.Text += lbltext.Text;
        listofcode = "";
    }
    flagsw.Reset();
}

private void txtletters_KeyUp(object sender, KeyEventArgs e)
{
    txtletters.BackColor = Color.White;
    sw.Stop();
    if (sw.ElapsedMilliseconds < 250)
        listofcode += ".";
    else
        listofcode += "-";
    sw.Reset();
    flagsw.Start();
}

我只是设法以某种方式完成工作,但是显示的代码如下: 按任意键时,第一个计时器将启动,第一个计时器确定是否。要么 - 当你释放它时,第二个计时器将启动(使用该计时器我想知道是否应该关闭&#39;。&#39;,&#39; - &#39;的字符串并发送到数据库以返回指定的字符...这里的问题是应用程序不会结束计时器并返回char,除非我再次执行keydown,这意味着除非我按下另一个键,否则我不会看到键入的字符(只是不要告诉我它,因为第二个计时器处于keydown,我不得不这样做因为我没有其他任何选择......但至少我知道这个想法但是不知道如何实现它...我只需要有人帮我实现它...) 我需要第二个计时器在后台工作,当发生keydown时它将重置,当一个keyup发生时(意味着该键被释放)它将再次启动。每当第二个计时器(flagsw.ElapsedMilliseconds> 400)大于那个时间它就会完成工作并清除该字符串以供下次使用。

1 个答案:

答案 0 :(得分:-1)

首先,我要感谢克里斯...有了你的答案我得到了主意并找到了方法...... 它现在已经完全实现,如果有其他人想要使用,我的代码就是我的代码......(它只是莫尔斯项目的解码器部分)

namespace Morse_Code
{
    public partial class frmdecdotmode : Form
    {
        Boolean flag_isdown = false;
        Stopwatch sw = new Stopwatch();
        Timer morse_timer = new Timer();
        string listofcode;
        DataSet datas = new DataSet();
        DataBaseController dbc = new DataBaseController();
        public frmdecdotmode()
        {
            InitializeComponent();
        }

        private void frmdecdotmode_FormClosing(object sender, FormClosingEventArgs e)
        {
            MainMenu mm = new MainMenu();
            mm.Show();
            this.Hide();
        }

        private void txtletters_KeyDown(object sender, KeyEventArgs e)
        {
            flag_isdown = true;
            txtletters.BackColor = Color.Yellow;
            sw.Start();
            morse_timer.Stop();
        }

        private void txtletters_KeyUp(object sender, KeyEventArgs e)
        {
            flag_isdown = false;
            txtletters.BackColor = Color.White;
            sw.Stop();
            if (sw.ElapsedMilliseconds < 250)
                listofcode += ".";
            else
                listofcode += "-";
            sw.Reset();
            morse_timer.Start();
        }

        private void frmdecdotmode_Load(object sender, EventArgs e)
        {
            morse_timer.Interval = 1000;
            morse_timer.Enabled = true;
            morse_timer.Tick += morse_timer_Tick;
        }
        private void morse_timer_Tick(object sender, EventArgs e)
        {
            if (flag_isdown == false && listofcode != null)
            {
                datas = dbc.srchfortext(listofcode);
                lbltext.DataBindings.Clear();
                lbltext.DataBindings.Add("text", datas, "t.letter");
                txtletters.Text += lbltext.Text;
                listofcode = "";
            }
        }
    }
}

感谢每一位帮助我做这件事的人...... Ya Ali(a.s)