我在Excel 2013中添加了一个CustomTaskPane,可以让用户快速搜索照片.如果用户只打开/创建一个工作簿,它运行良好.问题是,如果他们打开另一个工作簿或创建一个新工作簿,任务窗格不会出现在出现的新窗口中.它只是放在原来的窗口.我知道这种行为是由于我只是在打开Excel时初始化面板而引起的.我向ActiveWindow事件添加了一个事件处理程序,以便在打开另一个工作簿时初始化一个新面板.
问题是我无法弄清楚如何判断CustomTaskPane是否已经存在于窗口中.如果是,则简单地创建另一个CustomTaskPane,因此在该窗口中现在有两个.我编写了以下代码来处理原始代码并创建一个新代码,但它引入了一些滞后(1-5秒),每次更改工作簿窗口时都会引起用户疯狂.有没有办法查看窗口中是否已存在CustomTaskPane以避免处理和重新创建新窗口以避免堆叠重复的任务窗格?
Microsoft.Office.Tools.CustomTaskPane PartPhotoTaskPane;
Globals.ThisAddIn.Application.WindowActivate += Application_WindowActivate;
void Application_WindowActivate(Excel.Workbook Wb, Excel.Window Wn)
{
if (PartPhotoTaskPane != null)
{
PartPhotoTaskPane.Dispose();
InitalizePartPhotoViewerTaskPane(EPPF);
}
else
{
InitalizePartPhotoViewerTaskPane(EPPF);
}
}
/// <summary>
/// Start up the part photo viewer task pane
/// </summary>
private void InitalizePartPhotoViewerTaskPane(ExcelPartPhotoFunctions _EPPF)
{
//intialize the part search
try
{
PartPhotoTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(new PartPhotoSearchPane(_EPPF), "Part Information", Globals.ThisAddIn.Application.ActiveWindow);
PartPhotoTaskPane.Visible = Properties.Settings.Default.InfoPaneOpenStatus;
PartPhotoTaskPane.Width = 260;
}
catch (Exception e)
{
MessageBox.Show("Error starting Part Info Toolbar:" + Environment.NewLine +
e.Message + Environment.NewLine …Run Code Online (Sandbox Code Playgroud) 我遇到了一个从WPF项目打印的奇怪问题.我正在打印应用程序的屏幕截图以进行报告,所有这些都可以正常工作.当前用户按下打印,出现打印对话框,并打印出捕获图像.
但是,我希望能够直接打印到默认打印机而不显示对话框.这应该通过评论ShowDialog()声明并允许其余部分恰好发生来轻松完成.打印机仍然打印,但页面始终为空白.谁能解释这种行为?
private void PrintCurrentScreen()
{
PrintDialog PD = new PrintDialog();
PD.PrintTicket.OutputColor = OutputColor.Grayscale;
PD.PrintTicket.OutputQuality = OutputQuality.Draft;
PrintTicket PT = new PrintTicket();
PT.PageOrientation = PageOrientation.Landscape;
PT.CopyCount = 1;
PT.PageBorderless = System.Printing.PageBorderless.Borderless;
//---Blank pages print when commented out---//
//if (PD.ShowDialog() == true)
//{
PD.PrintTicket = PT;
DrawingVisual DV = new DrawingVisual();
DV.Offset = new Vector(20, 20);
DrawingContext DC = DV.RenderOpen();
DC.DrawImage(previewimage.Source, new Rect(new Size(PD.PrintableAreaWidth - 40, PD.PrintableAreaHeight - 40)));
DC.Close();
PD.PrintVisual(DV, "TEST");
//}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个基本循环,它将在数据视图网格中找到特定值.我无法弄清楚代码是什么,因为for循环在评估其基本条件之前退出.
private void SearchDataViewGrid(string FileName)
{
//finds the selected entry in the DVG based on the image
for (int i = 0; i == dataPartsList.Rows.Count ; i++)
{
if(FileName == dataPartsList.Rows[i].Cells[3].Value.ToString())
{
dataPartsList.Rows[i].Selected = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
该程序没有崩溃,但我的'i'变量声明它已经被优化掉了.尝试了一些我在网上找到的简单修复,但似乎没有任何保留.
我已经验证我传递的字符串是正确的,我的'虚拟'DVG返回包含的行数值14.即使我删除for循环中的'if'语句,我仍然会得到相同的错误.
我正在尝试制作一个SQL语句来从数据库中提取样本值.该表包含与CNC机床中的刀具更改有关的值.我当前的语句正确地提取了值,但只有在给定程序中出现一个工具时才会这样.如果工具多次出现,则时间值对应于从第一次加载到最后一次加载.只有一个TIME列,通过查找它的第一个和最后一个,我可以确定工具进/出时间.
基本示例:
Raw Data:
Tool_Number TIME
100 12:00
100 12:01
100 12:02
100 12:03
Current Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:03
Run Code Online (Sandbox Code Playgroud)
但是,当工具多次出现时,事情会变得多毛,因为我不能再使用TOP和DISTINCT规则了.
Raw Data:
Tool_Number TIME
100 12:00
100 12:01
100 12:02
100 12:03
200 12:04
200 12:05
100 12:06
100 12:07
Current Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:07
200 12:04 12:05
Ideal Query Returns:
Tool_Number TIME_IN TIME_OUT
100 12:00 12:03
200 12:04 12:05
100 12:06 12:07
Run Code Online (Sandbox Code Playgroud)
我们正在进行时间分析,当然这严重影响了总时间值.目前的查询是:
SELECT * FROM (SELECT DISTINCT SPINDLE_POT FROM TBL_SPINDLE_DATA_M1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试SqlDependancy在SignalR项目中使用,但我似乎无法让OnChanged事件多次触发.它最初在订阅事件上触发,但在更改底层数据库后它永远不会再触发.我省略了SignalR和控制器代码,因为问题似乎在于存储库类.SqlDependancy.Start()在我Global.asax班上宣布.
从SQL服务器观察,我可以看到在我的应用程序启动时创建通知队列,并在关闭时终止.
public IEnumerable<Visitor> NotifyAllClients()
{
List<Visitor> visitors = new List<Visitor>();
using (var connection = new SqlConnection(new VisitorLogEntities().Database.Connection.ConnectionString))
{
using (var command = new SqlCommand(@"SELECT * FROM dbo.Visitors", connection))
//using (var command = new SqlCommand(@"SELECT [Id],[AgreeToTerms],[Base64Image],[CheckInDate],[CheckOutTime],[Company],[CountryOfOrigin],[email],[FirstName],[LastName],[IsInBuilding],[MeetingSubject],[MeetingTime],[PatriotHost],[phone],[title] FROM dbo.Visitors", connection))
{
var dependency = new SqlDependency(command);
dependency.OnChange += Database_OnChange;
if (connection.State == System.Data.ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
////compile visitor objects
////visitors.add(new Visitor());
}
}
return visitors.OrderByDescending(x => x.CheckInDate);
} …Run Code Online (Sandbox Code Playgroud)