代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace robot
{
public partial class Form2 : Form
{
robot r1 = new robot();
public Form2()
{
r1.name = “小A”;
r1.age = 8;
InitializeComponent();
}
public class robot
{
public string name
{
get;
set;
}
public int age
{
get;
set;
}
public string sayhello()
{
return string .Format (“你好!本人叫{0}”, name);
}
public string speak(string str)//对话方法
{
if (str.Contains(“姓名”) || str.Contains(“名字”) || str.Contains(“叫什么”))
{
return string.Format (“嘻嘻,本人叫{0}”, name);
}
else if (str.Contains(“年龄”) || str.Contains(“多大了”) || str.Contains(“多大岁数”))
{
return string.Format(“今年{0}岁了”, age);
}
else if (str.Contains(“你好”) || str.Contains(“hello”) || str.Contains(“hi”))
{
return string.Format(“你也好,哈哈”);
}
else if (str.Contains(“天气”) || str.Contains(“心情”))
{
return string.Format(“天气好心情自然就好了阿,嘿嘿”);
}
else if (str.Contains(“笑话”) || str.Contains(“搞笑的”))
{
return string.Format(“从前有个鬼,他放了个屁,然后死掉了,哈哈哈哈”);
}
else
{
return string.Format(“不好意思,你在说什么本人听不懂欸!”);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox2 .Text += textBox1.Text + “\n”;
textBox1.Text = “”;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.Text = “”;
textBox2 .Text = r1.sayhello();
string str = textBox1.Text;
while (true)
{
textBox2 .Text = r1.speak(str);
}
}
}
}
求高手指点一下,现在一发送就未响应
小白新手谢过
10
{
textBox2 .Text = r1.speak(str);
}
虽然不知道你是干嘛,但你这里在死循环
10
10
10
例如你响应 button2 点击事件时,一方面可以把 textbox1的内容附加到 text2 上面,同时清空 textbox1,但是接下来调用 r.speak(….) 的职责应该是这个事件的事,它负责把 r 说的话再贴到 textbox2 中。
对于 text2,它就算是能够响应用户从 textbox1 上最新录入的话(实际上原因是它可能取到的只是上面那个事件已经清空之后的结果),那么它调用 r.speak(…) 也应该只是添加 r 的一句话的返回结果就结束此事件(否则,相同事件下一次什么时候触发?)。
而且 text2 也不应该清空本人。
而且 r.speak(…) 的这个输入值应该是取最新的输入,你的程序一点也没有这方面的概念。
总之,最首要地,是从根上学点的交互设计逻辑。你用一张纸、一支笔就应该能把交互程序设计清楚。你应该先发散地将每一个控件的职责分别设计清楚,然后再不断测试其组合起来(用户输入有着千变万化的可能性)能否逻辑正确。这就好像把一堆电容、电阻搭在一起成为一个简单的逻辑控制器一样。假如一开始就没有根,那就长不成树。