我偶然发现了一个我无法解释的现象,我对它为何会发生这种现象感兴趣.我希望有人可以解释我的原因,以及如何摆脱这种现象:
我为应用程序创建了几个页面,然后是搜索页面.到现在为止还挺好.每当我试图点击组合框本身时它就会正常打开,但是一旦我松开鼠标按钮它就会再次关闭.除非我将鼠标移到组合框区域之外,然后释放它.我看到的唯一不同寻常的是焦点被自动重置到组合框之前的最后一个文本字段.
组合框本身是一个普通的html组合框,而文本框本身是用Html.TextBox("搜索")创建的.我也试图改变命名,以防我忽略javascript中的某些内容但没有变化.
然后我尝试了以下内容:
@Html.TextBox("search")
Kategorie @Html.DevExpress().ComboBox(
settings => {
settings.Name = "PrductCategory";
settings.ControlStyle.CssClass = "select";
settings.Width = 300;
settings.SelectedIndex = 0;
settings.Properties.DropDownStyle = DevExpress.Web.ASPxEditors.DropDownStyle.DropDown;
settings.Properties.IncrementalFilteringMode = DevExpress.Web.ASPxEditors.IncrementalFilteringMode.Contains;
settings.Properties.TextField = "Name";
settings.Properties.DisplayFormatInEditMode = false;
settings.Properties.Native = false;
settings.Properties.TextFormatString = "{0}";
settings.Properties.DisplayFormatString = "{0}";
settings.Properties.ValueField = "Id";
settings.Properties.ValueType = typeof(int);
}
).BindList(Categories).GetHtml()
Run Code Online (Sandbox Code Playgroud)
这表现得应该有整个时间(虽然组合框是可怕的格式化.因为我没有找到如何格式化它看起来像一个"普通的html"组合框我决定尝试本机模式,但更多到下面).当我将本机模式设置为true时,同样的现象再次发生(再次假,它表现正常).经过几个小时的浏览教程和文档后,我仍然完全失去了(特别是因为我没有找到任何使用的setfocus命令).
所以我的问题是:有没有人知道为什么会发生这种情况以及如何阻止这种现象发生?
TNX
备注:
当处于纯模式并且我通过标签切换到组合框时,我可以正常浏览列表(使用箭头键),但我仍然无法打开组合框,因为它会再次自动关闭并将焦点重置到文本框上( "搜索")与所有其他情况一样(除了native = false).
当本机模式设置为false并且我单击组合框时,焦点将丢失(并且在组合框[和它的文本字段]之前设置为文本字段不到1秒,然后在组合框未关闭时设置为组合框).
要显示特定进程运行多长时间的计时器,我使用后台工作程序来更新执行时间标签.当然,这应该每秒进行一次,以便用户看到它一直增加.
在尝试了一下并彻底失败后,我走了一条路,我每150毫秒检查一次,如果下一秒已经存在,那么我更新显示器.
private void ExecutionTimerBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Stopwatch executionTime = new Stopwatch();
double lastUpdateAtSeconds = 0;
executionTime.Start();
while (!ExecutionTimerBackgroundWorker.CancellationPending)
{
Thread.Sleep(150); // Sleep for some while to give other threads time to do their stuff
if (executionTime.Elapsed.TotalSeconds > lastUpdateAtSeconds + 1) // Update the Execution time display only once per second
{
ExecutionTimerBackgroundWorker.ReportProgress(0, executionTime.Elapsed); // Update the Execution time Display
lastUpdateAtSeconds = executionTime.Elapsed.TotalSeconds;
}
}
executionTime.Stop();
}
private void ExecutionTimerBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Update the display …Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个我无法解释的现象.
我正在使用popen来执行php然后以这种方式执行php脚本,然后pclose关闭它.到目前为止很好.我遇到了一些严重的麻烦,因为我使用它的脚本没有执行,而是在连续尝试3次之后我崩溃了zend-server(没有页面会再打开).我发现原因是我使用了错误的目录来安装php.exe.例:
if (pclose(popen("C:\wrongDir\php\php.exe C:\Zend\Apache2\htdocs\myApp\public\mytest.php 57 > C:\Logs\1\0\jobOut.log 2> C:\Logs\1\0\jobErr.log"))>-1)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
除了"wrongDir"之外,所有其他目录都是正确的...... popen甚至创建了jobOut和jobErr文件(它们都是空的).(注意:PHP不在搜索路径中,这就是为什么没有正确的路径就找不到它)
即使我现在解决了这个问题.... 我有一个问题,如果这是一个正常的行为,或者我做错了什么(甚至可能是服务器设置). 从我在手册中读到的关于这两个命令的内容来看,它告诉我,在我的情况下,我应该有一个-1或0的返回值,而不是我遇到过程然后服务器挂起的问题).
谢谢.
我有一个包含多个列的Telerik.WinControls.UI.RadGridView.我正在使用rowvalidation和cellvalidation的混合来验证我得到的输入(虽然对于当前问题我也尝试停用rowvalidation但仍然得到相同的结果).
我有一个daterow,我使用cellvalidating事件来验证它(否则如果用户键入错误的日期我得到一个例外).我期望的行为是显示错误消息并且未验证单元格.第二件事有效,但是当我将鼠标移动到单元格的边框上时,仅显示错误消息(否则它只是未显示).
所以我的问题是如何才能实现错误消息尽快显示并且只要通过验证发现错误?
这是我使用的cellvalidation代码:
void MainFormGridView_CellValidating(object sender, CellValidatingEventArgs eventArgs)
{
var currentCell = eventArgs.Row.Cells[eventArgs.ColumnIndex];
if (eventArgs.Column.Name == "OrderDate")
{
if (eventArgs.Value == null)
{
eventArgs.Cancel = true;
}
else
{
try
{
DateTime dateValue;
if (!DateTime.TryParse(eventArgs.Value.ToString(), out dateValue))
{
eventArgs.Cancel = true;
}
}
catch
{
// Error occured so validation error!
eventArgs.Cancel = true;
}
}
if (eventArgs.Cancel)
{
currentCell.ErrorText = "Error no valid date! Please type in a valid date";
}
else
{
currentCell.ErrorText = string.Empty;
}
} …Run Code Online (Sandbox Code Playgroud) 我想知道有什么方法可以像%PROGRAMFILES%, %APPDATA%,....使用 System.Diagnostics.Process.Start一样使用普通的快捷方式窗体窗口?
我想要做的是使用这些快捷方式之一动态创建用于启动我想从 Process.Start 开始的程序的路径。例子:
System.Diagnostics.Process.Start("%PROGRAMFILES%\MyApp\MyApp.exe");
Run Code Online (Sandbox Code Playgroud)
编辑:作为对已接受答案的评论:
由于在评论中提到了一件重要的事情,我也想把它放在这里:如果由于找不到文件而解决方案不起作用,则应打印出 System.Environment.ExpandEnvironmentVariables 命令的结果。它可能会无意中指向 x86 程序文件位置而不是程序文件位置(反之亦然),具体取决于应用程序本身(项目属性)“首选 32 位”或平台目标是否相应设置。如果牢记这一点,该解决方案效果很好。
我有一个很大的字符串列表(大约 5k-20k 个条目),我需要订购并从中删除重复项。
我现在以两种方式完成此操作,一次使用哈希集,一次仅使用 linq。使用该数量的条目进行测试并没有显示出很大的差异,但我想知道哪种方式以及哪种方法更适合。
对于方式(myList 是数据类型 List):
Linq:我使用 1 条 linq 语句对列表进行排序并从中获取不同的值。
myList = myList.OrderBy(q => q).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
Hashset:我使用 hashset 删除所有重复项,然后我对列表进行排序
myList = new HashSet<String>(myList).ToList<String>();
myList = myList.OrderBy(q => q).ToList();
Run Code Online (Sandbox Code Playgroud)
就像我说的,我所做的测试对这两种方法的时间消耗大致相同,但我仍然想知道一种方法是否比另一种方法更好,如果是这样,为什么(代码用于高性能部分,我需要获得每毫秒我可以出它)。
我正在尝试创建一个将文件上传到 FTP 服务器的批处理文件。一切正常,除了一个特定文件夹的名称中包含突变/元音(无法更改。也就是文件夹名称有一个ö内部。)。
我的问题是:有哪些选择可以实现这一目标?
ftp批处理文件示例(UTF-8 编码):
cd C:\uplaodfiles\ländle\*
ftp -n -s:C:\test\UploadTest.ftp
Run Code Online (Sandbox Code Playgroud)
加载文件示例:
open meimei
user meiuser meipassword
pasv
bin
cd uploaddir
prompt
mput c:\uploadfiles\ländle\*
close
bye
Run Code Online (Sandbox Code Playgroud)
它所有的工作,直到mput在ftp尝试转换ä成特殊字符本地驱动器自然没有找到。
作为附加说明:我c:\test从命令行上的文件夹开始,因为UploadTest.bat文件位于那里......即使我使用cd. 因此,如果我mput不带参数使用(或只使用*给定),它仍然c:\test是他复制的。
编辑:
运行的输出(我剪掉了不重要的部分......pasv顺便说一句失败了。不知道为什么?之前已经展示过,所以我把那部分去掉了)。
ftp> BIN
200 Command okay.
ftp> cd uploaddir
250 CWD command successful.
ftp> prompt
Interaktivmodus AUS . <-- interactive mode off
ftp> mput C:\L?ñndle\* <-- should …Run Code Online (Sandbox Code Playgroud) 我目前正试图将数据表插入到数据库中.它工作得很好,速度很快.如果数据库中已存在任何行(重复键),则会出现唯一的问题.
为了解决这个问题,我修改了我的程序,以便我首先检查每个新条目是否已存在于数据库中.这是.......慢(在目前的情况下,我没有很多条目,但后来我需要检查的超过200k条目和那几次).因此,我需要让它变得更快(如果可能的话).
数据表的结构如下:
DataTable transactionTable.Columns.Add("DeviceId", typeof(Int32));
transactionTable.Columns.Add("LogDate", typeof(DateTime));
transactionTable.Columns.Add("LogType", typeof(Int32));
transactionTable.Columns.Add("LogText", typeof(String));
transactionTable.PrimaryKey = new DataColumn[3] {
transactionTable.Columns[0],
transactionTable.Columns[1],
transactionTable.Columns[2]
};
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的是以下内容:
DataTable insertTable = transactionTable.Copy();
insertTable.Clear();
using (SqlConnection sqlcon = new SqlConnection(this.GetConnString()))
{
sqlcon.Open();
foreach (var entry in transactionTable.AsEnumerable())
{
using (SqlCommand sqlCom = sqlCon.CreateCommand())
{
sqlCom.Parameters.Clear();
sqlCom.CommandText = "SELECT 1 FROM myTable WHERE"
+ " DeviceId = @DeviceId AND LogDate = @LogDate"
+ " AND LogType = @LogType"
sqlCom.Parameters.AddWithValue("@DeviceId", entry.Field<Int32>("DeviceId"));
sqlCom.Parameters.AddWithValue("@LogDate", entry.Field<DateTime>("LogDate"));
sqlCom.Parameters.AddWithValue("@LogType", entry.Field<Int32>("LogType"));
using (SqlDataREader myRead = …Run Code Online (Sandbox Code Playgroud) 我正在使用ac#program来查看硬盘上仍有多少GB(总大小为1 TB,可用大小为110 GB(确切地说,根据Windows资源管理器中的驱动器属性:118.333.329.408字节),根据Windows ).
我的问题是我得到的结果是.....关闭.
根据我在下面使用的C#方法,它是10,135,252,992字节.....但根据Windows 110!GB是免费的.
注意:我在Windows Server这里谈论的是驱动器是D驱动器.因此没有交换文件,也没有隐藏的系统文件(至少不超过任何非系统驱动器,因为系统驱动器是C驱动器).
public long GetTotalFreeSpace(string driveName)
{
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.IsReady && drive.Name == driveName)
{
return drive.TotalFreeSpace;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这是怎么做的以及如何纠正它?
我正在使用excel 2010 professional plus来创建一个excel文件.后来我试图将其导出为UTF-8 .csv文件.我这样做是通过将其保存为CSV(符号分隔..... sry我不知道那里的确切措辞,但我没有英文版本,我担心它的翻译方式不同于1:1).在那里我点击tools-> weboptions并选择unicode(UTF-8)作为编码.示例.csv如下:
ID;englishName;germanName
1;Austria;Österreich
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但如果我现在用我的PHP代码打开文件:
header('Content-Type: text/html; charset=UTF-8');
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "UTF-8");
setlocale(LC_ALL, 'de_DE.utf8');
$fp=fopen($filePathName,'r');
while (($dataRow= fgetcsv($fp,0,";",'"') )!==FALSE)
{
print_r($dataRow);
}
Run Code Online (Sandbox Code Playgroud)
如果我去另一条路线并使用notedpad ++创建一个新的UTF-8文件并输入与excel文件相同的数据,当我用php文件打开它时,我会在屏幕上显示"Österreich".
现在我的问题是,为什么它不能与excel一起运行,因此我在这里做错了什么?还是我忽略了什么?
编辑: 由于程序最终将被安装在客户提供的Windows服务器上,因此无需安装其他工具(php库,......),但是必须安装vm-ware或cygwin,......不是).此外,服务器上不会有本地安装的excel(或办公室),因为客户可以通过文件上传对话框上传.csv文件(对话本身不是问题的一部分,因为我知道如何当我创建一个excel文件并在excel在本地安装的testmachine上将其转换为.csv时,我偶然发现了这些以及问题本身.
TNX
c# ×7
php ×2
asp.net ×1
batch-file ×1
csv ×1
datatable ×1
devexpress ×1
excel ×1
ftp ×1
hashset ×1
io ×1
linq ×1
optimization ×1
radgridview ×1
razor ×1
sql ×1
sql-server ×1
telerik ×1
validation ×1
winforms ×1
zend-server ×1