これを試して:
private bool IsRightToLeft(Control c){
if(c.RightToLeft == RightToLeft.Inherit){
return (c.Parent != null) ? IsRightToLeft(c.Parent) : false;
//I think if the Control has no Parent, its Default RightToLeft is Inherit.
}
else return c.RightToLeft == RightToLeft.Yes;
}
または拡張メソッドを使用します。
public static class ControlExtension {
public static bool IsRightToLeft(this Control c){
return c.RightToLeft == RightToLeft.Inherit ? (c.Parent != null ? IsRightToLeft(c.Parent) : false) : c.RightToLeft == RightToLeft.Yes;
}
}
アップデート
これは、と呼ばれるwin32関数を使用しますが、より単純な別の解決策ですGetWindowLong
。全体的なアイデアは、 if 、スタイルRightToLeft = RightToLeft.Yes
をControl
持つことになりWS_EX_RIGHT = 0x1000
ます。 )。RightToLeft = RightToLeft.No
RightToLeft = RightToLeft.Inherit
Yes
No
No
[DllImport("user32")]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
public static class ControlExtension {
public static bool IsRightToLeft(this Control c){
return (GetWindowLong(c.Handle,-20) & 0x1000) != 0;//GWL_EXSTYLE = -20
}
}
以前投稿したものより良いと思います。:)