【问题标题】:Button inside a winforms textbox vb.netwinforms文本框vb.net内的按钮
【发布时间】:2013-12-02 21:23:13
【问题描述】:

我是 vb.net 程序员,我找到了我的问题的解决方案,但在 c# 中的这个地址:Button inside a winforms textbox

我已将代码转换为 vb.net,它运行良好,只是按钮下方的文本是我转换后的 c# 代码,请告诉我哪里错了

C#代码

    protected override void OnLoad(EventArgs e) {
    var btn = new Button();
    btn.Size = new Size(25, textBox1.ClientSize.Height + 2);
    btn.Location = new Point(textBox1.ClientSize.Width - btn.Width, -1);
    btn.Cursor = Cursors.Default;
    btn.Image = Properties.Resources.star;
    textBox1.Controls.Add(btn);
    // Send EM_SETMARGINS to prevent text from disappearing underneath the button
    SendMessage(textBox1.Handle, 0xd3, (IntPtr)2, (IntPtr)(btn.Width << 16));
    base.OnLoad(e);  
}

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

我的 VB.NET 代码

     btn.Size = New Size(25, Me.ClientSize.Height + 2)
     btn.Location = New Point(Me.ClientSize.Width - btn.Width - 1)
     btn.FlatStyle = FlatStyle.Flat
     btn.Cursor = Cursors.Default
     btn.Image = Image.FromFile("C:\ansoft\Soljica\texture\tone.png")
     btn.FlatAppearance.BorderSize = 0
     textbox1.Controls.Add(btn)
     SendMessage(textbox1.Handle, &HED3, CType(2, IntPtr), CType((btn.Width << 16), IntPtr))


<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
End Function

如果有人可以告诉我,vb.net 代码有什么问题?

c# 代码学分转到:Hans Passant

【问题讨论】:

  • 在将消息从 C# 转换为 VB 时,您似乎添加了一个“E”。 &amp;HED3 应该是 &amp;HD3
  • 试过了还是不行:(

标签: winforms button textbox controls add


【解决方案1】:

看起来与SizeLocation 相关的部分代码有误。试试这个:

    btn.Size = New Size(25, textBox1.ClientSize.Height + 2)
    btn.Location = New Point(textBox1.ClientSize.Width - btn.Width - 1, -1)
    btn.FlatStyle = FlatStyle.Flat
    btn.Cursor = Cursors.Default
    btn.Image = Image.FromFile("C:\ansoft\Soljica\texture\tone.png")
    btn.FlatAppearance.BorderSize = 0
    textBox1.Controls.Add(btn)
    SendMessage(textBox1.Handle, &HD3, CType(2, IntPtr), CType((btn.Width << 16), IntPtr))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2013-03-15
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多