小编Zia*_*iki的帖子

简单的自定义事件

我正在尝试学习自定义事件,我试图创建一个但看起来我有问题

我创建了一个Form,静态类和自定义事件.我想要实现的是当我按下按钮时,Form会调用静态类函数,然后func会不时地发出一个事件来报告当前状态.Form1将监听事件是否被引发,如果是,它将更改label1的Text

这是我到目前为止所拥有的

public partial class Form1 : Form
{
    public EventHandler<Progress> progress; 

    public Form1()
    {
        InitializeComponent();
        progress += SetStatus;
    }

    private void SetStatus(object sender, Progress e)
    {
        label1.Text = e.Status;
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
         TestClass.Func();
    }

 }
Run Code Online (Sandbox Code Playgroud)

档案2

class TestClass
{
    public static void Func()
    {
        //time consuming code
        Report status 
        // time consuming code
        report status
    }
}

public class Progress : EventArgs
{
    public string Status { get; private set; }

    private Progress() …
Run Code Online (Sandbox Code Playgroud)

c# events

72
推荐指数
4
解决办法
14万
查看次数

botframeworkv4 - 可用频道 ID 列表

在探索botframeworkv4C# 中的新预览时,我遇到了一个案例,我需要对某个频道执行特定操作。在 中botframeworkv3,我曾经使用过访问所有频道字符串名称,ChannelIds但在这里找不到。

"facebook"例如,我知道我可以直接编写,但是使用提供的列表可以防止任何拼写错误并提高可读性。

因此,ChannelIdsin的等价物是botframeworkv4什么?

c# botframework

8
推荐指数
2
解决办法
1097
查看次数

SendKey.Send()不工作

我正在使用WPF,我导入了System.Windows.Form引用.这是我的代码:

Process[] process = Process.GetProcessesByName("wmplayer");
SetForegroundWindow(process[0].MainWindowHandle);
Thread.Sleep(200);
System.Windows.Forms.SendKeys.Send("^p");
Run Code Online (Sandbox Code Playgroud)

Windows Media Player执行聚焦,但未收到任何击键.为什么?

c# forms wpf

7
推荐指数
1
解决办法
2万
查看次数

Kotlin 在 C# 中“应用”等效

使用 Kotlin 时,可以使用apply设置现有对象的多个属性并保持代码更清晰,例如,而不是:

person.firstName = "John"
person.lastName = "Doe"
person.phone = "123 456 789"
Run Code Online (Sandbox Code Playgroud)

我们可以用:

person.apply {
   firstName = "John"
   lastName = "Doe"
   phone = "123 456 789"
}
Run Code Online (Sandbox Code Playgroud)

是否有与applyC# 中的等效项?

最接近的是,using但据我所知,它不能以这种方式使用。

编辑:我知道C# 中的对象初始值设定项,但实际上我正在寻找可以为现有对象(例如从数据库中获取的对象)完成的操作。

c# kotlin

7
推荐指数
2
解决办法
1078
查看次数

将String转换为相应的Forms.Keys值?

我正在寻找一种方法将a的值转换string为等效System.Windows.Forms.Keys项.然后,此值将用于PressKey模拟相应的Key.我试过用KeyConverter这样的:

    [DllImport("user32.dll", SetLastError = true)]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

    public static void PressKey(System.Windows.Forms.Keys key, bool up)
        {
            const int KEYEVENTF_EXTENDEDKEY = 0x1;
            const int KEYEVENTF_KEYUP = 0x2;
            if (up)
            {
                keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
            }
            else
            {
                keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
            }
        }

    KeyConverter kc = new KeyConverter();
    PressKey((System.Windows.Forms.Keys)kc.ConvertFromString(string), false);
Run Code Online (Sandbox Code Playgroud)

我需要的是string喜欢"Enter"被转换为System.Windows.Forms.Keys.Enter.但是KeyConverter没有返回任何东西.有什么想法吗?

.net c# string winforms

5
推荐指数
2
解决办法
5340
查看次数

加载 Webchat 控件后立即从机器人发送问候/欢迎消息

我正在使用 Microsoft 的 C# Bot 框架开发机器人。我试图在用户发送任何内容之前向用户发送欢迎消息作为介绍。

经过研究,我HandleSystemMessage在a的情况下使用function和发送消息在某种程度上实现了这一点ConversationUpdate,如下所示:

if (activity.Type == ActivityTypes.ConversationUpdate) 
{
    IConversationUpdateActivity update = activity;
    if (update.MembersAdded.Any())
    {
        foreach (var newMember in update.MembersAdded)
        {
            if (newMember.Id != activity.Recipient.Id)
            {
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

                Activity reply = activity.CreateReply();
                reply.Text("Hello, how can I help you?");
                await connector.Conversations.ReplyToActivityAsync((Activity)bubble);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我用这种方法面临的问题:

  • 在模拟器中,当您点击上面的刷新按钮或用户开始输入时,如果它已经闲置了一段时间,就会出现欢迎消息。这是我正在寻找的行为,它按预期工作。
  • 现在,当使用Bot Framework Web Chat组件时,此消息会在用户发起对话时发送,即当用户键入内容并将其发送给机器人时。这不是我想要的,而是我希望在加载 Web 聊天控件后立即从机器人显示消息,因为消息将包含有关如何使用机器人的一些说明。

我认为我的问题可以使用另一种ActivityType或者一些 Javascript 'hacky' 方式来解决,但直到现在我找不到解决方案。

c# botframework

3
推荐指数
1
解决办法
2338
查看次数

为什么片段重新创建时onChange()调用了两次

我正在尝试使用新的android体系结构组件,但是一时我很困惑。

我创建了一个ViewModel类

public class BuyViewModel extends ViewModel {

private BuyRepository buyRepository;
private LiveData<Adverts> advertsLiveData;
private boolean isLoading;
private int currentPage;

@Inject
public BuyViewModel(BuyRepository buyRepository) {
    this.buyRepository = buyRepository;
}

public void init(int currentPage) {
    this.currentPage = currentPage;
    if (this.advertsLiveData != null) {
        return;
    }
    Timber.tag("logi").d("BuyViewModel > init -> ");
    advertsLiveData = buyRepository.getAdverts(currentPage);
}

public LiveData<Adverts> getAdvertsLiveData() {
    return advertsLiveData;
}
}
Run Code Online (Sandbox Code Playgroud)

在我的LifeCycleFragment中观察LiveData

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    buyViewModel = ViewModelProviders.of(this, viewModelFactory).get(BuyViewModel.class);
    buyViewModel.init(1);
    buyViewModel.getAdvertsLiveData().observe(this, adverts -> {
        Timber.tag("logi").d("BuyFragment …
Run Code Online (Sandbox Code Playgroud)

android viewmodel android-livedata android-architecture-components

2
推荐指数
1
解决办法
1209
查看次数