我正在尝试开发一个将文本转换为莫尔斯代码的应用程序,反之亦然。我只是设法完成了第一阶段,这意味着当你输入一个字符时,你会看到该字符的编码类型。 但在第二阶段,我遇到了一些问题: 这是我的代码:(提示: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)大于那个时间它就会完成工作并清除该字符串以供下次使用。
答案 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)