怎么样重写winform 的textbox(单行) 追加个属性,可以控制垂直居中

胖胖_多多 2009-10-28 01:06:57
如题 谢谢
...全文
776 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhushoudong 2010-02-23
  • 打赏
  • 举报
回复
你说垂直居中的 是有属性 设置的HorizontalAlignment.Center
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
有没有哪位给了直接能用的阿
zhouyanfss 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 builderc 的回复:]
引用 11 楼 rihyou 的回复:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
这句话翻译成C#  应该怎么写啊


C# codestruct LVITEM
{private Int32 mask;private Int32 iItem;private Int32 iSubItem;private Int32 state;private Int32 stateMask;privatestring pszText;private Int32 cchTextMax;private Int32 iImage;private Int32 lParam;private Int32 iIndent;
}


[DllImport("user32.dll", EntryPoint="SendMessageA")]staticextern Int32 SendMessageA (Int32 hwnd, Int32 wMsg, Int32 wParam, LVITEM pitem);
[/Quote]
long 对应的是Int64,直接用long就可以了
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
大家帮来看看啊
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
哈哈 谢谢yuxuanji

我也是 vb 和 c# 基本都没有用过 然后给朋友改点东西
用.net 2005 遇到textBox不垂直居中这个问题,它好像是默认的底下空那么一点

大家都说要重写这个控件
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
if(userdefineTextBox.Multiline == false)
这个写错了 应该是
if(userdefineTextBox.Multiline == true)
LutzMark 2009-10-28
  • 打赏
  • 举报
回复
没弄过 帮顶
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复

userdefineTextBox.hwnd
UserControl.Parent
Screen.TwipsPerPixelY
userdefineTextBox.Alignment = vbCenter;
UserControl.Height
UserControl.Width;


以上这几个东西应该怎么写啊
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复

struct LVITEM
{
private Int32 mask;
private Int32 iItem;
private Int32 iSubItem;
private Int32 state;
private Int32 stateMask;
private string pszText;
private Int32 cchTextMax;
private Int32 iImage;
private Int32 lParam;
private Int32 iIndent;
}

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
static extern Int32 SendMessage (Int32 hwnd, Int32 wMsg, Int32 wParam, LVITEM pitem);

private const string EM_GETRECT = "&HB2";
private const string EM_SETRECTNP = "&HB4";

private struct RECT
{
public long Left;
public long Top;
public long Right;
public long Bottom;
}

private void SetVCenterText(TextBox userdefineTextBox)
{
RECT rc;
long UserControlTop;
long UserControlBottom;
if(userdefineTextBox.Multiline == false)
{
SendMessage(userdefineTextBox.hwnd, EM_GETRECT, 0, rc);
UserControlTop = ((rc.Bottom - rc.Top) - (UserControl.Parent.TextHeight("H")/Screen.TwipsPerPixelY))/2;
UserControlBottom = ((rc.Bottom - rc.Top) + (UserControl.Parent.TextHeight("H") / Screen.TwipsPerPixelY))/2;
rc.Top = UserControlTop;
rc.Bottom = UserControlBottom;

userdefineTextBox.Alignment = vbCenter;

SendMessage(userdefineTextBox.hwnd, EM_SETRECTNP, 0, rc);

userdefineTextBox.Refresh();
}
}

private void UserControl_Resize()
{
textBox1.Top = 0;
textBox1.Left = 0;
textBox1.Height = UserControl.Height;
textBox1.Width = UserControl.Width;
SetVCenterText(textBox1);
}

这个是我简单翻译Vb->C#的代码 但是里边好多东西都没有的 请大家帮看看
wu8862889 2009-10-28
  • 打赏
  • 举报
回复
单行,垂直居中。。。没弄明白
trentliu 2009-10-28
  • 打赏
  • 举报
回复


using System.Runtime.InteropServices;
  
[DllImport("user32.dll", EntryPoint="SendMessageA")]
  public static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", EntryPoint="SendMessageA")]
  private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);
  [DllImport("user32.dll", EntryPoint="SendMessageA")]
  private static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, ref Rectangle lParam);



在C#中使用SendMessage
trentliu 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rihyou 的回复:]
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
这句话翻译成C#  应该怎么写啊
[/Quote]


struct LVITEM
{
private Int32 mask;
private Int32 iItem;
private Int32 iSubItem;
private Int32 state;
private Int32 stateMask;
private string pszText;
private Int32 cchTextMax;
private Int32 iImage;
private Int32 lParam;
private Int32 iIndent;
}


[DllImport("user32.dll", EntryPoint="SendMessageA")]
static extern Int32 SendMessageA (Int32 hwnd, Int32 wMsg, Int32 wParam, LVITEM pitem);
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
这句话翻译成C# 应该怎么写啊
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
h_w_king
我要的是垂直居中
h_w_king 2009-10-28
  • 打赏
  • 举报
回复
你指的是textBox里的文居中还是控件本身居中?
若文本居中
winform的textBox就有该属性。
this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
Xuon 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lzsh0622 的回复:]
VB.NET例子,用C#重写一下.
自定义TextBox控件对齐方式为为垂直居中
[/Quote]

呵呵,应该是这样,设置属性。
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
逗我呢啊
胖胖_多多 2009-10-28
  • 打赏
  • 举报
回复
winform的也能加css吗
lzsh0622 2009-10-28
  • 打赏
  • 举报
回复
梦里开天 2009-10-28
  • 打赏
  • 举报
回复
本身就是竖直居中的啊
加载更多回复(3)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧