我有一个Windows表单,我想打开一个状态表单,上面写着"正在保存...",然后在保存完成时消失.我想将这个小状态表单放在调用表单的中间.我已经尝试将"StartPosition"设置为"CenterParent",但它确实有效.我从另一个表单创建状态表单,如下所示:
SavingForm saving = new SavingForm();
savingForm.Show();
Thread.Sleep(500); //Someone said this is bad practice ... why?
savingForm.Close();
Run Code Online (Sandbox Code Playgroud)
呼叫形式不是"父母"吗?当我设置一个保存手表时说它没有父母.
我试过了:
SavingForm saving = new SavingForm();
saving.Parent = this;
savingForm.Show();
Thread.Sleep(500);
savingForm.Close();
Run Code Online (Sandbox Code Playgroud)
它会引发异常"顶级控件无法添加到控件中".
如何将此状态窗口置于调用窗口中心?
提前致谢
WPF与Windows Forms有一个类似的问题,它提供了一些很好的信息,但根据我的个人经验,我认为没有理由在Winforms上使用WPF.有了WPF,最初有很多关于它的多线程功能的讨论,但在使用中我看不到任何好处.
我有两个应用程序执行相同的操作,一个在WPF中,另一个在Winforms中.Winforms应用程序在性能方面(通过10倍)将WPF应用程序吹走,看起来同样不错.
当然,我比WinF更精通Winforms应用程序.
可能是一个菜鸟问题,但互操作不是我的优点之一.
除了限制重载次数之外,有任何理由我应该声明我的DllImports:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)
并像这样使用它们:
IntPtr lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(formatrange));
Marshal.StructureToPtr(formatrange, lParam, false);
int returnValue = User32.SendMessage(_RichTextBox.Handle, ApiConstants.EM_FORMATRANGE, wParam, lParam);
Marshal.FreeCoTaskMem(lParam);
Run Code Online (Sandbox Code Playgroud)
而不是创建目标重载:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref FORMATRANGE lParam);
Run Code Online (Sandbox Code Playgroud)
使用它像:
FORMATRANGE lParam = new FORMATRANGE();
int returnValue = User32.SendMessage(_RichTextBox.Handle, ApiConstants.EM_FORMATRANGE, wParam, ref lParam);
Run Code Online (Sandbox Code Playgroud)
by ref重载最终更容易使用,但我想知道是否存在我不知道的缺点.
编辑:
到目前为止,有很多很棒的信息.
@P爸爸:你有一个基于抽象(或任何)类的结构类的例子吗?我将签名改为:
[DllImport("user32.dll", SetLastError = true)]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, [In, …Run Code Online (Sandbox Code Playgroud) 我的问题是我创建了一个"扩展"的RichTextBox控件,它使用本机API添加标准控件中缺少的许多RichEdit功能(即:修改选择的单个字体属性,而不更改其他字体属性,自动换行到打印机[如写字板]等).作为控件的一部分,我公开了一个PrintDocument,用于打印RichTextBox的格式化内容.当wordwrap设置为"Wrap To Printer"时,我将EM_SETTARGETDEVICE消息发送到RichTextBox,并使其换行到适当的长度.
当某些内容(用户/代码)更改了我的控件的WordWrap属性时,这一切都正常.但是,如果之后修改了PrintDocument,我无法知道它.因此,即使用户可能更改了PrintDocument上的边距,我的RichTextBoxEx也不会为更新的宽度重新发送EM_SETTARGETDEVICE,直到WordWrap属性发生更改.
我看到了一些可以克服这一点的选择,但我不是他们中的任何一个的忠实粉丝.这就是我所拥有的:
添加一个UpdatePrintDocument()方法或类似的方法,需要在控件外部的东西之后调用(即:父窗体上的PageSetupDialog)更新PrintDocument中的设置.缺点:我将分发控件,所以我想让它尽可能友好.虽然我可能记得在我成功更新PrintDocument设置时随时调用该方法,但其他人可能不会.亲:实施起来很简单.
创建一个新的PrintDocumentEx类,它基于PrintDocument并实现所需的"Changed"事件.缺点:可能还不够,可能需要创建PrintSettingsEx,PageSettingsEx等.Pro:实施一次,没有人再担心它.
我真的认为#2是我必须选择的选项但是对于下一个实例它不是非常可重用我需要一些类似的功能.我想我正在寻找的是一种将"通用PropertyChanged事件"附加到任何现有类属性的方法,因为这将适用于未来的情况.急于看到你们对我有什么:-)
如何在Windows窗体中的WebBrowser控件中显示地址栏?
我有一个大脑屁试图使下面的方法更通用,以便任何List<T>可以传入columnValues参数.这就是我所拥有的:
public static DataRow NewRow(this DataTable dataTable, List<string> columnValues)
{
DataRow returnValue = dataTable.NewRow();
while (columnValues.Count > returnValue.Table.Columns.Count)
{
returnValue.Table.Columns.Add();
}
returnValue.ItemArray = columnValues.ToArray();
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
我可以将它更改为a List<object>并在将其传递给方法之前转换原始列表但我确信有更好的选择:-)
编辑:
弗兰克的帖子让我重新思考这一点.在大多数情况下,源List<T>将是一个,List<object>因为列值很可能是不同的类型.
对于我最初的使用是List<string>有道理的,因为我是从CSV解析创建一个数据集,这是该点的所有文本.
我正在使用Android Studio进行编程.目标SDK为23,最低SDK为15
我正在尝试删除操作栏和滑动标签布局之间的阴影.但我无法做到.
注意:阴影仅在Android 5和更高版本中可见.
我已经使用<item name="elevation">0dp</item>和getSupportActionBar().setElevation(0);
,但它仍然不工作...
我的Style.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
<item name="elevation">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我的风格V21
<resources>>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我的MainActivity.java onCreateCode:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); …Run Code Online (Sandbox Code Playgroud) 我试图SlidingTabLayout在我的内部放置android.support.v7.widget.Toolbar但由于某种原因在纵向布局中有额外的顶部和底部填充.如截图所示:
在横向布局中,android.support.v7.widget.Toolbar它更短,额外的填充消失了:
我知道contentInsertStart和contentInsetEnd属性,但似乎没有任何顶部和底部.这是我的布局:
<android.support.design.widget.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="?attr/actionBarTheme"
>
<!-- Changing the size of the toolbar fixed the problem below but I don't like the solution since the height difference is perceptible -->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimary"
android:padding="0dp"
app:popupTheme="?attr/actionBarPopupTheme"
>
<!-- TODO: BUG - This isn't filling out the action bar in portrait (see note above) -->
<com.myapplication.views.widgets.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/pink_400"
/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
如评论中所示,如果我手动将高度设置android.support.v7.widget.Toolbar为48dp然后将其 …
android android-support-library android-toolbar android-appbarlayout
我该如何覆盖UserControl Visible属性?或者如何在控件内确定何时更改其Visible状态?
稍后编辑:我需要它在.NET CF 3.5中工作.
谢谢.